diff --git a/src/main/java/com/imprimelibros/erp/externalApi/skApiClient.java b/src/main/java/com/imprimelibros/erp/externalApi/skApiClient.java index bbeb5f7..76b9477 100644 --- a/src/main/java/com/imprimelibros/erp/externalApi/skApiClient.java +++ b/src/main/java/com/imprimelibros/erp/externalApi/skApiClient.java @@ -128,6 +128,68 @@ public class skApiClient { }); } + public Map getLomos(Map requestBody, Locale locale) { + try { + String jsonResponse = performWithRetry(() -> { + String url = this.skApiUrl + "api/get-lomos"; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setBearerAuth(authService.getToken()); // token actualizado + + Map data = new HashMap<>(); + data.put("clienteId", requestBody.get("clienteId")); + data.put("tamanio", requestBody.get("tamanio")); + data.put("tirada", requestBody.get("tirada")); + data.put("paginas", requestBody.get("paginas")); + data.put("paginasColor", requestBody.get("paginasColor")); + data.put("papelInteriorDiferente", 0); + data.put("paginasCuadernillo", requestBody.get("paginasCuadernillo")); + data.put("tipo", requestBody.get("tipo")); + data.put("isColor", requestBody.get("isColor")); + data.put("isHq", requestBody.get("isHq")); + data.put("interior", requestBody.get("interior")); + data.put("cubierta", requestBody.get("cubierta")); + + HttpEntity> entity = new HttpEntity<>(data, headers); + + ResponseEntity response = restTemplate.exchange( + url, + HttpMethod.POST, + entity, + String.class); + + return response.getBody(); + }); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode root = mapper.readTree(jsonResponse); + + if (root.get("lomoInterior") == null || !root.get("lomoInterior").isInt()) { + throw new RuntimeException( + messageSource.getMessage("presupuesto.errores.error-interior", new Object[] { 1 }, locale)); + } + + Double lomoInterior = root.get("lomoInterior").asDouble(); + Double lomoCubierta = root.get("lomoCubierta").asDouble(); + return Map.of( + "lomoInterior", lomoInterior, + "lomoCubierta", lomoCubierta); + + } catch (JsonProcessingException e) { + // Fallback al 80% del ancho + Map tamanio = new ObjectMapper().convertValue( + requestBody.get("tamanio"), + new TypeReference>() { + }); + + return Map.of( + "lomoInterior", 0.0, + "lomoCubierta", 0.0); + + } + } + public Map savePresupuesto(Map requestBody) { return performWithRetryMap(() -> { String url = this.skApiUrl + "api/guardar"; diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java index 7f92b0d..d04a2d3 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java @@ -908,6 +908,14 @@ public class PresupuestoController { return ResponseEntity.badRequest().body(errores); } + try{ + Map lomos = presupuestoService.obtenerLomos(presupuesto); + presupuesto.setLomo(Double.valueOf(lomos.get("lomoInterior").toString())); + presupuesto.setLomoCubierta(Double.valueOf(lomos.get("lomoCubierta").toString())); + }catch(Exception ex){ + log.error("Error al obtener lomos desde SK API", ex); + } + try { Map saveResult = presupuestoService.guardarPresupuesto( diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/service/PresupuestoService.java b/src/main/java/com/imprimelibros/erp/presupuesto/service/PresupuestoService.java index a92c8cd..2c88990 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/service/PresupuestoService.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/service/PresupuestoService.java @@ -1297,6 +1297,20 @@ public class PresupuestoService { } + public Map obtenerLomos(Presupuesto presupuesto) { + try { + Long papelInteriorId = presupuesto.getPapelInteriorId() != null ? presupuesto.getPapelInteriorId() : 0L; + Long papelCubiertaId = presupuesto.getPapelCubiertaId() != null ? presupuesto.getPapelCubiertaId() : 0L; + int paginas = presupuesto.getPaginasNegro() + presupuesto.getPaginasColor(); + Map response = apiClient.getLomos(papelInteriorId, papelCubiertaId, paginas); + + return response.get("data") != null ? (Map) response.get("data") : Map.of(); + } catch (Exception e) { + System.out.println("Error obteniendo lomos: " + e.getMessage()); + return Map.of(); + } + } + /** * PRIVADO (futuro botón "Guardar"): persiste el presupuesto como borrador. */ diff --git a/src/main/resources/db/changelog/master.yml b/src/main/resources/db/changelog/master.yml index 5a361d8..9a28114 100644 --- a/src/main/resources/db/changelog/master.yml +++ b/src/main/resources/db/changelog/master.yml @@ -1,60 +1,59 @@ databaseChangeLog: - - include: - file: db/changelog/changesets/0001-baseline.yml - - include: - file: db/changelog/changesets/0002-create-pedidos.yml - - include: - file: db/changelog/changesets/0003-create-paises.yml - - include: - file: db/changelog/changesets/0004-create-direcciones.yml - - include: - file: db/changelog/changesets/0005-add-carts-onlyoneshipment.yml - - include: - file: db/changelog/changesets/0006-add-cart-direcciones.yml - - include: - file: db/changelog/changesets/0007-payments-core.yml - - include: - file: db/changelog/changesets/0008-update-cart-status-constraint.yml - - include: - file: db/changelog/changesets/0009-add-composite-unique-txid-type.yml - - include: - file: db/changelog/changesets/0010-drop-unique-tx-gateway.yml - - include: - file: db/changelog/changesets/0011-update-pedidos-presupuesto.yml - - include: - file: db/changelog/changesets/0012--drop-unique-gateway-txid-2.yml - - include: - file: db/changelog/changesets/0013-drop-unique-refund-gateway-id.yml - - include: - file: db/changelog/changesets/0014-create-pedidos-direcciones.yml - - include: - file: db/changelog/changesets/0015-alter-pedidos-lineas-and-presupuesto-estados.yml - - include: - file: db/changelog/changesets/0016-fix-enum-estado-pedidos-lineas.yml - - include: - file: db/changelog/changesets/0017-add-fecha-entrega-to-pedidos-lineas.yml - - include: - file: db/changelog/changesets/0018-change-presupuesto-ch-3.yml - - include: - file: db/changelog/changesets/0019-add-estados-pago-to-pedidos-lineas.yml - - include: - file: db/changelog/changesets/0020-add-estados-pago-to-pedidos-lineas-2.yml - - include: - file: db/changelog/changesets/0021-add-email-and-is-palets-to-pedidos-direcciones.yml - - include: - file: db/changelog/changesets/0022-add-estados-pago-to-pedidos-lineas-3.yml - - include: - file: db/changelog/changesets/0023-facturacion.yml - - include: - file: db/changelog/changesets/0024-series-facturacion-seeder.yml - - include: - file: db/changelog/changesets/0025-create-facturas-direcciones.yml - - include: - file: db/changelog/changesets/0026-drop-entrega-tipo-from-presupuesto.yml - - include: - file: db/changelog/changesets/0027-add-lomo-to-presupuesto.yml - - include: - file: db/changelog/changesets/0028-add-lomo-cubierta-to-presupuesto.yml - - include: - file: db/changelog/changesets/0029-update-estados-pedidos-lineas.yml - + - include: + file: db/changelog/changesets/0001-baseline.yml + - include: + file: db/changelog/changesets/0002-create-pedidos.yml + - include: + file: db/changelog/changesets/0003-create-paises.yml + - include: + file: db/changelog/changesets/0004-create-direcciones.yml + - include: + file: db/changelog/changesets/0005-add-carts-onlyoneshipment.yml + - include: + file: db/changelog/changesets/0006-add-cart-direcciones.yml + - include: + file: db/changelog/changesets/0007-payments-core.yml + - include: + file: db/changelog/changesets/0008-update-cart-status-constraint.yml + - include: + file: db/changelog/changesets/0009-add-composite-unique-txid-type.yml + - include: + file: db/changelog/changesets/0010-drop-unique-tx-gateway.yml + - include: + file: db/changelog/changesets/0011-update-pedidos-presupuesto.yml + - include: + file: db/changelog/changesets/0012--drop-unique-gateway-txid-2.yml + - include: + file: db/changelog/changesets/0013-drop-unique-refund-gateway-id.yml + - include: + file: db/changelog/changesets/0014-create-pedidos-direcciones.yml + - include: + file: db/changelog/changesets/0015-alter-pedidos-lineas-and-presupuesto-estados.yml + - include: + file: db/changelog/changesets/0016-fix-enum-estado-pedidos-lineas.yml + - include: + file: db/changelog/changesets/0017-add-fecha-entrega-to-pedidos-lineas.yml + - include: + file: db/changelog/changesets/0018-change-presupuesto-ch-3.yml + - include: + file: db/changelog/changesets/0019-add-estados-pago-to-pedidos-lineas.yml + - include: + file: db/changelog/changesets/0020-add-estados-pago-to-pedidos-lineas-2.yml + - include: + file: db/changelog/changesets/0021-add-email-and-is-palets-to-pedidos-direcciones.yml + - include: + file: db/changelog/changesets/0022-add-estados-pago-to-pedidos-lineas-3.yml + - include: + file: db/changelog/changesets/0023-facturacion.yml + - include: + file: db/changelog/changesets/0024-series-facturacion-seeder.yml + - include: + file: db/changelog/changesets/0025-create-facturas-direcciones.yml + - include: + file: db/changelog/changesets/0026-drop-entrega-tipo-from-presupuesto.yml + - include: + file: db/changelog/changesets/0027-add-lomo-to-presupuesto.yml + - include: + file: db/changelog/changesets/0028-add-lomo-cubierta-to-presupuesto.yml + - include: + file: db/changelog/changesets/0029-update-estados-pedidos-lineas.yml diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/wizard.js b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/wizard.js index 2a29b52..d87721f 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/wizard.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/wizard.js @@ -1690,6 +1690,11 @@ export default class PresupuestoWizard { this.divTiradas.append(item.renderCol(this.divTiradas)); } + if(data.lomo_cubierta) { + this.formData.lomoCubierta = data.lomo_cubierta; + this.#cacheFormData(); + } + if (this.divTiradas.find('.tirada-card input[type="radio"]:checked').length === 0) { this.divTiradas.find('.tirada-card input[type="radio"]').first().prop('checked', true).trigger('change'); this.formData.selectedTirada = this.divTiradas.find('.tirada-card input[type="radio"]').first().data('unidades') || data.tiradas[0];