mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-13 08:58:48 +00:00
tengo el texto del resumen final
This commit is contained in:
13
src/main/java/com/imprimelibros/erp/config/WebConfig.java
Normal file
13
src/main/java/com/imprimelibros/erp/config/WebConfig.java
Normal file
@ -0,0 +1,13 @@
|
||||
package com.imprimelibros.erp.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class WebConfig {
|
||||
@Bean
|
||||
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
|
||||
return new ResourceUrlEncodingFilter();
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.imprimelibros.erp.presupuesto.Presupuesto.TipoCubierta;
|
||||
import com.imprimelibros.erp.presupuesto.Presupuesto.TipoEncuadernacion;
|
||||
import com.imprimelibros.erp.presupuesto.Presupuesto.TipoImpresion;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
@ -19,4 +23,16 @@ public class TranslationService {
|
||||
}
|
||||
return translations;
|
||||
}
|
||||
|
||||
public String label(TipoEncuadernacion t, Locale locale) {
|
||||
return messageSource.getMessage(t.getMessageKey(), null, locale);
|
||||
}
|
||||
public String label(TipoImpresion t, Locale locale) {
|
||||
return messageSource.getMessage(t.getMessageKey(), null, locale);
|
||||
}
|
||||
public String label(TipoCubierta t, Locale locale) {
|
||||
return messageSource.getMessage(t.getMessageKey(), null, locale);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -19,15 +19,54 @@ import jakarta.persistence.*;
|
||||
public class Presupuesto implements Cloneable{
|
||||
|
||||
public enum TipoEncuadernacion {
|
||||
fresado, cosido, grapado, espiral, wireo
|
||||
fresado("presupuesto.fresado"),
|
||||
cosido("presupuesto.cosido"),
|
||||
grapado("presupuesto.grapado"),
|
||||
espiral("presupuesto.espiral"),
|
||||
wireo("presupuesto.wireo");
|
||||
|
||||
private final String messageKey;
|
||||
|
||||
TipoEncuadernacion(String messageKey) {
|
||||
this.messageKey = messageKey;
|
||||
}
|
||||
|
||||
public String getMessageKey() {
|
||||
return messageKey;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TipoImpresion {
|
||||
negro, negrohq, color, colorhq
|
||||
negro("presupuesto.blanco-negro"),
|
||||
negrohq("presupuesto.blanco-negro-premium"),
|
||||
color("presupuesto.color"),
|
||||
colorhq("presupuesto.color-premium");
|
||||
|
||||
private final String messageKey;
|
||||
|
||||
TipoImpresion(String messageKey) {
|
||||
this.messageKey = messageKey;
|
||||
}
|
||||
|
||||
public String getMessageKey() {
|
||||
return messageKey;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TipoCubierta {
|
||||
tapaBlanda, tapaDura, tapaDuraLomoRedondo
|
||||
tapaBlanda("presupuesto.tapa-blanda"),
|
||||
tapaDura("presupuesto.tapa-dura"),
|
||||
tapaDuraLomoRedondo("presupuesto.tapa-dura-lomo-redondo");
|
||||
|
||||
private final String messageKey;
|
||||
|
||||
TipoCubierta(String messageKey) {
|
||||
this.messageKey = messageKey;
|
||||
}
|
||||
|
||||
public String getMessageKey() {
|
||||
return messageKey;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,6 +83,7 @@ public class Presupuesto implements Cloneable{
|
||||
private Long id;
|
||||
|
||||
@NotNull(message = "{presupuesto.errores.tipo-encuadernacion}", groups = PresupuestoValidationGroups.DatosGenerales.class)
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "tipo_encuadernacion")
|
||||
private TipoEncuadernacion tipoEncuadernacion = TipoEncuadernacion.fresado;
|
||||
|
||||
@ -104,6 +144,7 @@ public class Presupuesto implements Cloneable{
|
||||
private Integer paginasColorTotal;
|
||||
|
||||
@NotNull(message = "{presupuesto.errores.tipo-impresion}", groups = PresupuestoValidationGroups.Interior.class)
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "tipo_impresion")
|
||||
private TipoImpresion tipoImpresion = TipoImpresion.negro;
|
||||
|
||||
@ -116,6 +157,7 @@ public class Presupuesto implements Cloneable{
|
||||
private Integer gramajeInterior;
|
||||
|
||||
@NotNull(message = "{presupuesto.errores.tipo-cubierta}", groups = PresupuestoValidationGroups.Cubierta.class)
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "tipo_cubierta")
|
||||
private TipoCubierta tipoCubierta = TipoCubierta.tapaBlanda;
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
@ -376,14 +377,31 @@ public class PresupuestoController {
|
||||
}
|
||||
|
||||
// Se hace un post para no tener problemas con la longitud de la URL
|
||||
@PostMapping("/public/getresumen")
|
||||
public ResponseEntity<?> getResumen(@ModelAttribute("presupuesto") Presupuesto presupuesto,
|
||||
@RequestParam String summary, Locale locale) throws JsonProcessingException {
|
||||
|
||||
Map<String, Object> summaryMap = new ObjectMapper().readValue(summary,
|
||||
new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
return ResponseEntity.ok(presupuestoService.getResumen(presupuesto, summaryMap, locale));
|
||||
@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 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@ import com.imprimelibros.erp.configurationERP.VariableService;
|
||||
import com.imprimelibros.erp.presupuesto.Presupuesto.TipoCubierta;
|
||||
import com.imprimelibros.erp.presupuesto.classes.ImagenPresupuesto;
|
||||
import com.imprimelibros.erp.presupuesto.classes.PresupuestadorItems;
|
||||
import com.imprimelibros.erp.presupuesto.classes.PresupuestoFormatter;
|
||||
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionPrecios;
|
||||
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionPreciosRepository;
|
||||
import com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas;
|
||||
@ -56,9 +57,11 @@ public class PresupuestoService {
|
||||
protected MarcapaginasRepository marcapaginasRepository;
|
||||
|
||||
private final PresupuestadorItems presupuestadorItems;
|
||||
private final PresupuestoFormatter presupuestoFormatter;
|
||||
|
||||
public PresupuestoService(PresupuestadorItems presupuestadorItems) {
|
||||
public PresupuestoService(PresupuestadorItems presupuestadorItems, PresupuestoFormatter presupuestoFormatter) {
|
||||
this.presupuestadorItems = presupuestadorItems;
|
||||
this.presupuestoFormatter = presupuestoFormatter;
|
||||
}
|
||||
|
||||
public boolean validateDatosGenerales(int[] tiradas) {
|
||||
@ -301,15 +304,6 @@ public class PresupuestoService {
|
||||
"cabezada", presupuesto.getCabezada(),
|
||||
"lomoRedondo", presupuesto.getTipoCubierta() == TipoCubierta.tapaDuraLomoRedondo ? 1 : 0);
|
||||
|
||||
/*
|
||||
* Map<String, Object> servicios = Map.of(
|
||||
* "retractilado", 0,
|
||||
* "retractilado5", 0,
|
||||
* "ferro", 0,
|
||||
* "ferroDigital", 0,
|
||||
* "marcapaginas", 0,
|
||||
* "prototipo", 0);
|
||||
*/
|
||||
Map<String, Object> body = new HashMap<>();
|
||||
body.put("tipo_impresion_id", this.getTipoImpresionId(presupuesto));
|
||||
body.put("tirada", Arrays.stream(presupuesto.getTiradas())
|
||||
@ -781,22 +775,13 @@ public class PresupuestoService {
|
||||
return out;
|
||||
}
|
||||
|
||||
public Map<String, Object> getResumen(Presupuesto presupuesto, Map<String, Object> summary, Locale locale) {
|
||||
|
||||
public Map<String, Object> getResumen(Presupuesto presupuesto, String[] servicios, Locale locale) {
|
||||
Map<String, Object> resumen = new HashMap<>();
|
||||
|
||||
resumen.put("titulo", presupuesto.getTitulo());
|
||||
resumen.put("texto", presupuestoFormatter.resumen(presupuesto, servicios, locale));
|
||||
|
||||
/*
|
||||
* Integer tirada = presupuesto.getSelectedTirada() != null ?
|
||||
* presupuesto.getSelectedTirada() : 0;
|
||||
* if (Arrays.asList(servicios).contains("deposito-legal")) {
|
||||
* tirada += 4;
|
||||
* }
|
||||
*/
|
||||
|
||||
String textoResumen = messageSource.getMessage("presupuesto.resumen-texto", null, locale);
|
||||
textoResumen = textoResumen.replace("{tipoEncuadernacion}", summary.get("encuadernacion").toString());
|
||||
resumen.put("resumen", textoResumen);
|
||||
return resumen;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@ import java.util.Map;
|
||||
@Component
|
||||
public class PresupuestadorItems {
|
||||
|
||||
|
||||
|
||||
@Autowired
|
||||
private MessageSource messageSource;
|
||||
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package com.imprimelibros.erp.presupuesto.classes;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class PresupuestoAcabados {
|
||||
|
||||
private final MessageSource messageSource;
|
||||
|
||||
public PresupuestoAcabados(MessageSource messageSource) {
|
||||
this.messageSource = messageSource;
|
||||
}
|
||||
|
||||
private static final Map<Integer, String> ACABADO_KEYS = Map.of(
|
||||
0, "presupuesto.acabado-ninguno",
|
||||
1, "presupuesto.acabado-plastificado-brillo-1c",
|
||||
5, "presupuesto.acabado-plastificado-mate-1c",
|
||||
8, "presupuesto.acabado-plastificado-mate-1c-antirrayado",
|
||||
2, "presupuesto.acabado-plastificado-mate-uvi",
|
||||
3, "presupuesto.acabado-plastificado-mate-uvi3d",
|
||||
4, "presupuesto.acabado-plastificado-mate-uvi-braile",
|
||||
9, "presupuesto.acabado-plastificado-sandy-1c"
|
||||
);
|
||||
|
||||
public String labelAcabado(int id, Locale locale) {
|
||||
String key = ACABADO_KEYS.get(id);
|
||||
return key != null ? messageSource.getMessage(key, null, locale) : String.valueOf(id);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,135 @@
|
||||
package com.imprimelibros.erp.presupuesto.classes;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.imprimelibros.erp.i18n.TranslationService;
|
||||
import com.imprimelibros.erp.presupuesto.Presupuesto;
|
||||
import org.springframework.context.MessageSource;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
|
||||
@Component
|
||||
public class PresupuestoFormatter {
|
||||
|
||||
private final TranslationService translationService;
|
||||
private final MessageSource ms;
|
||||
private final PresupuestoPapeles papeles;
|
||||
private final PresupuestoAcabados acabados;
|
||||
|
||||
public PresupuestoFormatter(
|
||||
TranslationService translationService,
|
||||
MessageSource ms,
|
||||
PresupuestoPapeles papeles,
|
||||
PresupuestoAcabados acabados) {
|
||||
this.translationService = translationService;
|
||||
this.ms = ms;
|
||||
this.papeles = papeles;
|
||||
this.acabados = acabados;
|
||||
}
|
||||
|
||||
public String resumen(Presupuesto p, String[] 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(),
|
||||
};
|
||||
String textoResumen = ms.getMessage("presupuesto.resumen-texto", args, locale);
|
||||
textoResumen += "<ul>";
|
||||
|
||||
// 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
|
||||
);
|
||||
textoResumen += impresionCubierta;
|
||||
|
||||
if (p.getSolapasCubierta()) {
|
||||
textoResumen += ms.getMessage(
|
||||
"presupuesto.resumen-texto-solapas-cubierta",
|
||||
new Object[] { p.getTamanioSolapasCubierta() },
|
||||
locale
|
||||
);
|
||||
}
|
||||
}
|
||||
// tapa dura
|
||||
else if (p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaDura
|
||||
|| p.getTipoCubierta() == Presupuesto.TipoCubierta.tapaDuraLomoRedondo) {
|
||||
|
||||
String textImpresionGuardas = "";
|
||||
if (p.getGuardasImpresas() == 0) {
|
||||
textImpresionGuardas = ms.getMessage("presupuesto.guardas-no-impresas", null, locale);
|
||||
} else if (p.getGuardasImpresas() == 4) {
|
||||
textImpresionGuardas = ms.getMessage("presupuesto.guardas-impresas-una-cara", null, locale);
|
||||
} else if (p.getGuardasImpresas() == 8) {
|
||||
textImpresionGuardas = ms.getMessage("presupuesto.guardas-impresas-dos-caras", null, locale);
|
||||
}
|
||||
|
||||
textoResumen += ms.getMessage(
|
||||
"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
|
||||
);
|
||||
}
|
||||
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
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
|
||||
);
|
||||
}
|
||||
textoResumen += ms.getMessage("presupuesto.resumen-texto-end", null, locale);
|
||||
|
||||
return textoResumen;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package com.imprimelibros.erp.presupuesto.classes;
|
||||
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class PresupuestoPapeles {
|
||||
|
||||
private final MessageSource messageSource;
|
||||
|
||||
public PresupuestoPapeles(MessageSource messageSource) {
|
||||
this.messageSource = messageSource;
|
||||
}
|
||||
|
||||
private static final Map<Integer, String> PAPEL_KEYS = Map.of(
|
||||
2, "presupuesto.estucado-mate",
|
||||
3, "presupuesto.offset-blanco",
|
||||
4, "presupuesto.offset-ahuesado",
|
||||
5, "presupuesto.cartulina-grafica-cubierta",
|
||||
6, "presupuesto.offset-ahuesado-volumen",
|
||||
7, "presupuesto.offset-blanco-volumen"
|
||||
);
|
||||
|
||||
private static final Map<String, String> CABEZADA_COLOR_KEYS = Map.of(
|
||||
"WHI", "presupuesto.cabezada-blanca",
|
||||
"GRE", "presupuesto.cabezada-verde",
|
||||
"BLUE", "presupuesto.cabezada-azul",
|
||||
"REDYEL", "presupuesto.cabezada-roja-amarilla"
|
||||
);
|
||||
|
||||
public String labelPapel(int id, Locale locale) {
|
||||
String key = PAPEL_KEYS.get(id);
|
||||
return key != null ? messageSource.getMessage(key, null, locale) : String.valueOf(id);
|
||||
}
|
||||
|
||||
public String labelCabezada(String code, Locale locale) {
|
||||
String key = CABEZADA_COLOR_KEYS.get(code);
|
||||
return key != null ? messageSource.getMessage(key, null, locale) : code;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user