mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-13 08:58:48 +00:00
trabajando con las lineas del resumen para la tabla
This commit is contained in:
@ -3,6 +3,7 @@ package com.imprimelibros.erp.presupuesto;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.imprimelibros.erp.externalApi.skApiClient;
|
||||
import com.imprimelibros.erp.presupuesto.classes.ImagenPresupuesto;
|
||||
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMaquetacion;
|
||||
@ -42,6 +44,12 @@ public class PresupuestoController {
|
||||
@Autowired
|
||||
protected MessageSource messageSource;
|
||||
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
public PresupuestoController(ObjectMapper objectMapper){
|
||||
this.objectMapper = objectMapper;
|
||||
}
|
||||
|
||||
@PostMapping("/public/validar/datos-generales")
|
||||
public ResponseEntity<?> validarDatosGenerales(
|
||||
@Validated(PresupuestoValidationGroups.DatosGenerales.class) Presupuesto presupuesto,
|
||||
@ -368,30 +376,13 @@ public class PresupuestoController {
|
||||
|
||||
// Se hace un post para no tener problemas con la longitud de la URL
|
||||
@PostMapping("/public/resumen")
|
||||
public ResponseEntity<?> getResumen(@RequestBody PresupuestoRequest req, Locale locale) {
|
||||
Presupuesto p = req.getPresupuesto();
|
||||
String[] servicios = req.getServicios() != null ? req.getServicios() : new String[0];
|
||||
return ResponseEntity.ok(presupuestoService.getResumen(p, servicios, locale));
|
||||
public ResponseEntity<?> getResumen(@RequestBody Map<String, Object> body, Locale locale) {
|
||||
Presupuesto p = objectMapper.convertValue(body.get("presupuesto"), Presupuesto.class);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> serviciosList = (List<Map<String, Object>>) body.getOrDefault("servicios", List.of());
|
||||
|
||||
return ResponseEntity.ok(presupuestoService.getResumen(p, serviciosList, locale));
|
||||
}
|
||||
|
||||
public static class PresupuestoRequest {
|
||||
private Presupuesto presupuesto;
|
||||
private String[] servicios;
|
||||
|
||||
public Presupuesto getPresupuesto() {
|
||||
return presupuesto;
|
||||
}
|
||||
|
||||
public void setPresupuesto(Presupuesto p) {
|
||||
this.presupuesto = p;
|
||||
}
|
||||
|
||||
public String[] getServicios() {
|
||||
return servicios;
|
||||
}
|
||||
|
||||
public void setServicios(String[] servicios) {
|
||||
this.servicios = servicios;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@ import org.springframework.context.MessageSource;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class PresupuestoFormatter {
|
||||
@ -28,20 +30,22 @@ public class PresupuestoFormatter {
|
||||
this.acabados = acabados;
|
||||
}
|
||||
|
||||
public String resumen(Presupuesto p, String[] servicios, Locale locale) {
|
||||
public String resumen(Presupuesto p, List<Map<String, Object>> servicios, Locale locale) {
|
||||
String encuadernacion = translationService.label(p.getTipoEncuadernacion(), locale);
|
||||
String tipoImpresion = translationService.label(p.getTipoImpresion(), locale);
|
||||
String tapaCubierta = translationService.label(p.getTipoCubierta(), locale);
|
||||
|
||||
Object[] args = {
|
||||
Arrays.asList(servicios).contains("deposito-legal") ? p.getSelectedTirada() + 4 : p.getSelectedTirada(),
|
||||
encuadernacion,
|
||||
tipoImpresion,
|
||||
(p.getPaginasColorTotal() != null ? p.getPaginasColorTotal() : p.getPaginasColor()) + p.getPaginasNegro(),
|
||||
p.getAncho(), p.getAlto(),
|
||||
papeles.labelPapel(p.getPapelInteriorId(), locale), p.getGramajeInterior(),
|
||||
tapaCubierta,
|
||||
papeles.labelPapel(p.getPapelCubiertaId(), locale), p.getGramajeCubierta(),
|
||||
|
||||
p.getSelectedTirada(),
|
||||
encuadernacion,
|
||||
tipoImpresion,
|
||||
(p.getPaginasColorTotal() != null ? p.getPaginasColorTotal() : p.getPaginasColor())
|
||||
+ p.getPaginasNegro(),
|
||||
p.getAncho(), p.getAlto(),
|
||||
papeles.labelPapel(p.getPapelInteriorId(), locale), p.getGramajeInterior(),
|
||||
tapaCubierta,
|
||||
papeles.labelPapel(p.getPapelCubiertaId(), locale), p.getGramajeCubierta(),
|
||||
};
|
||||
String textoResumen = ms.getMessage("presupuesto.resumen-texto", args, locale);
|
||||
textoResumen += "<ul>";
|
||||
@ -49,27 +53,25 @@ public class PresupuestoFormatter {
|
||||
// tapa blanda
|
||||
if (p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaBlanda) {
|
||||
String impresionCubierta = ms.getMessage(
|
||||
"presupuesto.resumen-texto-impresion-caras-cubierta",
|
||||
new Object[] {
|
||||
p.getCubiertaCaras() == 2
|
||||
? ms.getMessage("presupuesto.una-cara", null, locale)
|
||||
: ms.getMessage("presupuesto.dos-caras", null, locale)
|
||||
},
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-impresion-caras-cubierta",
|
||||
new Object[] {
|
||||
p.getCubiertaCaras() == 2
|
||||
? ms.getMessage("presupuesto.una-cara", null, locale)
|
||||
: ms.getMessage("presupuesto.dos-caras", null, locale)
|
||||
},
|
||||
locale);
|
||||
textoResumen += impresionCubierta;
|
||||
|
||||
if (p.getSolapasCubierta()) {
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-solapas-cubierta",
|
||||
new Object[] { p.getTamanioSolapasCubierta() },
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-solapas-cubierta",
|
||||
new Object[] { p.getTamanioSolapasCubierta() },
|
||||
locale);
|
||||
}
|
||||
}
|
||||
// tapa dura
|
||||
else if (p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaDura
|
||||
|| p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaDuraLomoRedondo) {
|
||||
|| p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaDuraLomoRedondo) {
|
||||
|
||||
String textImpresionGuardas = "";
|
||||
if (p.getGuardasImpresas() == 0) {
|
||||
@ -81,52 +83,48 @@ public class PresupuestoFormatter {
|
||||
}
|
||||
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-guardas-cabezada",
|
||||
new Object[] {
|
||||
textImpresionGuardas,
|
||||
papeles.labelPapel(p.getPapelGuardasId(), locale),
|
||||
p.getGramajeGuardas(),
|
||||
papeles.labelCabezada(p.getCabezada(), locale),
|
||||
},
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-guardas-cabezada",
|
||||
new Object[] {
|
||||
textImpresionGuardas,
|
||||
papeles.labelPapel(p.getPapelGuardasId(), locale),
|
||||
p.getGramajeGuardas(),
|
||||
papeles.labelCabezada(p.getCabezada(), locale),
|
||||
},
|
||||
locale);
|
||||
}
|
||||
|
||||
if (p.getAcabado() != null) {
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-acabado-cubierta",
|
||||
new Object[] { acabados.labelAcabado(p.getAcabado(), locale) },
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-acabado-cubierta",
|
||||
new Object[] { acabados.labelAcabado(p.getAcabado(), locale) },
|
||||
locale);
|
||||
}
|
||||
|
||||
textoResumen += ms.getMessage("presupuesto.resumen-texto-end", null, locale);
|
||||
|
||||
if (Boolean.TRUE.equals(p.getSobrecubierta())) {
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-sobrecubierta",
|
||||
new Object[] {
|
||||
papeles.labelPapel(p.getPapelSobrecubiertaId(), locale),
|
||||
p.getGramajeSobrecubierta(),
|
||||
acabados.labelAcabado(p.getAcabadoSobrecubierta(), locale),
|
||||
p.getTamanioSolapasSobrecubierta()
|
||||
},
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-sobrecubierta",
|
||||
new Object[] {
|
||||
papeles.labelPapel(p.getPapelSobrecubiertaId(), locale),
|
||||
p.getGramajeSobrecubierta(),
|
||||
acabados.labelAcabado(p.getAcabadoSobrecubierta(), locale),
|
||||
p.getTamanioSolapasSobrecubierta()
|
||||
},
|
||||
locale);
|
||||
}
|
||||
|
||||
if (Boolean.TRUE.equals(p.getFaja())) {
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-faja",
|
||||
new Object[] {
|
||||
papeles.labelPapel(p.getPapelFajaId(), locale),
|
||||
p.getGramajeFaja(),
|
||||
p.getAltoFaja(),
|
||||
acabados.labelAcabado(p.getAcabadoFaja(), locale),
|
||||
p.getTamanioSolapasFaja()
|
||||
},
|
||||
locale
|
||||
);
|
||||
"presupuesto.resumen-texto-faja",
|
||||
new Object[] {
|
||||
papeles.labelPapel(p.getPapelFajaId(), locale),
|
||||
p.getGramajeFaja(),
|
||||
p.getAltoFaja(),
|
||||
acabados.labelAcabado(p.getAcabadoFaja(), locale),
|
||||
p.getTamanioSolapasFaja()
|
||||
},
|
||||
locale);
|
||||
}
|
||||
textoResumen += ms.getMessage("presupuesto.resumen-texto-end", null, locale);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user