mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-13 00:48:49 +00:00
falta el selector de acabados
This commit is contained in:
@ -26,6 +26,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.imprimelibros.erp.externalApi.skApiClient;
|
||||
import com.imprimelibros.erp.presupuesto.classes.ImagenPresupuesto;
|
||||
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMaquetacion;
|
||||
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMarcapaginas;
|
||||
import com.imprimelibros.erp.presupuesto.validation.PresupuestoValidationGroups;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
@ -344,4 +345,34 @@ public class PresupuestoController {
|
||||
return ResponseEntity.ok(resultado);
|
||||
}
|
||||
|
||||
@GetMapping(value = "/public/marcapaginas/form", produces = MediaType.TEXT_HTML_VALUE)
|
||||
public String getMarcapaginasForm(Model model) {
|
||||
model.addAttribute("presupuestoMarcapaginas", new PresupuestoMarcapaginas());
|
||||
return "imprimelibros/presupuestos/presupuesto-marcapaginas-form :: marcapaginasForm";
|
||||
}
|
||||
|
||||
@GetMapping("/public/marcapaginas")
|
||||
public ResponseEntity<?> getPresupuestoMarcapaginas(
|
||||
@Valid @ModelAttribute PresupuestoMarcapaginas presupuestoMarcapaginas,
|
||||
BindingResult result,
|
||||
Locale locale) {
|
||||
|
||||
if (result.hasErrors()) {
|
||||
// Construimos un mapa field -> mensaje para tu AJAX
|
||||
Map<String, String> errores = result.getFieldErrors().stream()
|
||||
.collect(java.util.stream.Collectors.toMap(
|
||||
fe -> fe.getField(),
|
||||
fe -> fe.getDefaultMessage(),
|
||||
(a, b) -> a));
|
||||
return ResponseEntity.badRequest().body(errores);
|
||||
}
|
||||
|
||||
Map<String, Object> resultado = presupuestoService.getPrecioMarcapaginas(presupuestoMarcapaginas, locale);
|
||||
if ((Double) resultado.get("precio_total") == 0.0 && (Double) resultado.get("precio_unitario") == 0.0) {
|
||||
return ResponseEntity.badRequest()
|
||||
.body(messageSource.getMessage("presupuesto.errores.presupuesto-marcapaginas", null, locale));
|
||||
}
|
||||
return ResponseEntity.ok(resultado);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user