mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-20 15:50:21 +00:00
falta procesar el resultado
This commit is contained in:
@ -593,81 +593,72 @@ public class PresupuestoService {
|
||||
return price_prototipo;
|
||||
}
|
||||
|
||||
public HashMap<String, Object> getPrecioMaquetacion(Presupuesto presupuesto) {
|
||||
public HashMap<String, Object> getPrecioMaquetacion(PresupuestoMaquetacion presupuestoMaquetacion) {
|
||||
try {
|
||||
if (Boolean.TRUE.equals(presupuesto.getPresupuestoMaquetacion())
|
||||
&& presupuesto.getPresupuestoMaquetacionData() != null
|
||||
&& !presupuesto.getPresupuestoMaquetacionData().equals("{}")) {
|
||||
List<MaquetacionPrecios> lista = maquetacionPreciosRepository.findAll();
|
||||
|
||||
String jsonData = presupuesto.getPresupuestoMaquetacionData();
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
PresupuestoMaquetacion pm = objectMapper.readValue(jsonData, PresupuestoMaquetacion.class);
|
||||
List<MaquetacionPrecios> lista = maquetacionPreciosRepository.findAll();
|
||||
// helper para obtener un precio por clave
|
||||
java.util.function.Function<String, Double> price = key -> lista.stream()
|
||||
.filter(p -> key.equals(p.getKey()))
|
||||
.map(MaquetacionPrecios::getValue)
|
||||
.findFirst()
|
||||
.orElse(0.0);
|
||||
|
||||
// helper para obtener un precio por clave
|
||||
java.util.function.Function<String, Double> price = key -> lista.stream()
|
||||
.filter(p -> key.equals(p.getKey()))
|
||||
.map(MaquetacionPrecios::getValue)
|
||||
.findFirst()
|
||||
.orElse(0.0);
|
||||
BigDecimal precio = BigDecimal.ZERO;
|
||||
|
||||
BigDecimal precio = BigDecimal.ZERO;
|
||||
// millar_maquetacion * (numCaracteres / 1000.0)
|
||||
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"))));
|
||||
|
||||
// millar_maquetacion * (numCaracteres / 1000.0)
|
||||
BigDecimal millares = BigDecimal.valueOf(pm.getNumCaracteres()).divide(BigDecimal.valueOf(1000), 6,
|
||||
RoundingMode.HALF_UP);
|
||||
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("millar_maquetacion"))));
|
||||
|
||||
// Numero de paginas estimado
|
||||
int numPaginas = 0;
|
||||
Integer matricesPorPagina = maquetacionMatricesRepository.findMatrices(
|
||||
MaquetacionMatrices.Formato.valueOf(pm.getFormato()),
|
||||
MaquetacionMatrices.FontSize.valueOf(pm.getFontSize()));
|
||||
if (matricesPorPagina != null && matricesPorPagina > 0) {
|
||||
numPaginas = pm.getNumCaracteres() / matricesPorPagina;
|
||||
}
|
||||
// Precio por pagina estimado
|
||||
BigDecimal precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
|
||||
double precioPaginaEstimado = 0.0;
|
||||
if (numPaginas > 0) {
|
||||
precioPaginaEstimado = precioRedondeado
|
||||
.divide(BigDecimal.valueOf(numPaginas), 2, RoundingMode.HALF_UP)
|
||||
.doubleValue();
|
||||
}
|
||||
|
||||
// tabla, columna, foto
|
||||
precio = precio
|
||||
.add(BigDecimal.valueOf(pm.getNumTablas()).multiply(BigDecimal.valueOf(price.apply("tabla"))));
|
||||
precio = precio.add(
|
||||
BigDecimal.valueOf(pm.getNumColumnas()).multiply(BigDecimal.valueOf(price.apply("columnas"))));
|
||||
precio = precio
|
||||
.add(BigDecimal.valueOf(pm.getNumFotos()).multiply(BigDecimal.valueOf(price.apply("foto"))));
|
||||
|
||||
if (pm.isCorreccionOrtotipografica()) {
|
||||
precio = precio
|
||||
.add(millares.multiply(BigDecimal.valueOf(price.apply("correccion_ortotipografica"))));
|
||||
}
|
||||
if (pm.isTextoMecanografiado()) {
|
||||
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("mecanoescritura_por_millar"))));
|
||||
}
|
||||
if (pm.isDisenioPortada()) {
|
||||
precio = precio.add(BigDecimal.valueOf(price.apply("disenio_portada")));
|
||||
}
|
||||
if (pm.isEpub()) {
|
||||
precio = precio.add(BigDecimal.valueOf(price.apply("epub")));
|
||||
}
|
||||
|
||||
// redondeo final
|
||||
precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
|
||||
|
||||
HashMap<String, Object> out = new HashMap<>();
|
||||
out.put("precio", precioRedondeado.doubleValue());
|
||||
out.put("numPaginasEstimadas", numPaginas);
|
||||
out.put("precioPaginaEstimado", precioPaginaEstimado);
|
||||
return out;
|
||||
// Numero de paginas estimado
|
||||
int numPaginas = 0;
|
||||
Integer matricesPorPagina = maquetacionMatricesRepository.findMatrices(
|
||||
presupuestoMaquetacion.getFormato(),
|
||||
presupuestoMaquetacion.getCuerpoTexto());
|
||||
if (matricesPorPagina != null && matricesPorPagina > 0) {
|
||||
numPaginas = presupuestoMaquetacion.getNumCaracteres() / matricesPorPagina;
|
||||
}
|
||||
} catch (JsonProcessingException e) {
|
||||
System.out.println("Error procesando JSON de presupuesto maquetacion: " + e.getMessage());
|
||||
// Precio por pagina estimado
|
||||
BigDecimal precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
|
||||
double precioPaginaEstimado = 0.0;
|
||||
if (numPaginas > 0) {
|
||||
precioPaginaEstimado = precioRedondeado
|
||||
.divide(BigDecimal.valueOf(numPaginas), 2, RoundingMode.HALF_UP)
|
||||
.doubleValue();
|
||||
}
|
||||
|
||||
// tabla, columna, foto
|
||||
precio = precio
|
||||
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumTablas()).multiply(BigDecimal.valueOf(price.apply("tabla"))));
|
||||
precio = precio.add(
|
||||
BigDecimal.valueOf(presupuestoMaquetacion.getNumColumnas()).multiply(BigDecimal.valueOf(price.apply("columnas"))));
|
||||
precio = precio
|
||||
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumFotos()).multiply(BigDecimal.valueOf(price.apply("foto"))));
|
||||
|
||||
if (presupuestoMaquetacion.isCorreccionOrtotipografica()) {
|
||||
precio = precio
|
||||
.add(millares.multiply(BigDecimal.valueOf(price.apply("correccion_ortotipografica"))));
|
||||
}
|
||||
if (presupuestoMaquetacion.isTextoMecanografiado()) {
|
||||
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("mecanoescritura_por_millar"))));
|
||||
}
|
||||
if (presupuestoMaquetacion.isDisenioPortada()) {
|
||||
precio = precio.add(BigDecimal.valueOf(price.apply("disenio_portada")));
|
||||
}
|
||||
if (presupuestoMaquetacion.isEpub()) {
|
||||
precio = precio.add(BigDecimal.valueOf(price.apply("epub")));
|
||||
}
|
||||
|
||||
// redondeo final
|
||||
precioRedondeado = precio.setScale(2, RoundingMode.HALF_UP);
|
||||
|
||||
HashMap<String, Object> out = new HashMap<>();
|
||||
out.put("precio", precioRedondeado.doubleValue());
|
||||
out.put("numPaginasEstimadas", numPaginas);
|
||||
out.put("precioPaginaEstimado", precioPaginaEstimado);
|
||||
return out;
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("Error procesando presupuesto maquetacion: " + e.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user