From 5e9631073e4b5d903250642982c666a5d91f1010 Mon Sep 17 00:00:00 2001 From: jjimenez Date: Wed, 29 Oct 2025 13:31:25 +0100 Subject: [PATCH] falta el update carrito del backend --- .../erp/cart/CartController.java | 21 +++ .../imprimelibros/erp/cart/CartService.java | 27 ++- .../erp/pedido/PedidoService.java | 28 +++ .../0005-add-carts-onlyoneshipment.yml | 28 +++ .../changesets/0006-add-cart-direcciones.yml | 81 +++++++++ src/main/resources/db/changelog/master.yml | 6 +- src/main/resources/i18n/cart_es.properties | 9 +- src/main/resources/i18n/pedidos_es.properties | 2 +- src/main/resources/static/assets/css/cart.css | 13 +- .../js/pages/imprimelibros/cart/cart.js | 68 ++++++- .../pages/imprimelibros/cart/shipping-cart.js | 168 +++++++++++++----- .../imprimelibros/cart/_cartContent.html | 46 +++++ .../imprimelibros/cart/_cartItem.html | 7 + .../imprimelibros/cart/_cartSummary.html | 48 +++++ .../templates/imprimelibros/cart/cart.html | 95 +--------- .../imprimelibros/checkout/_envio.html | 8 +- .../direcciones/direccionCard.html | 23 ++- 17 files changed, 516 insertions(+), 162 deletions(-) create mode 100644 src/main/java/com/imprimelibros/erp/pedido/PedidoService.java create mode 100644 src/main/resources/db/changelog/changesets/0005-add-carts-onlyoneshipment.yml create mode 100644 src/main/resources/db/changelog/changesets/0006-add-cart-direcciones.yml create mode 100644 src/main/resources/templates/imprimelibros/cart/_cartContent.html create mode 100644 src/main/resources/templates/imprimelibros/cart/_cartSummary.html diff --git a/src/main/java/com/imprimelibros/erp/cart/CartController.java b/src/main/java/com/imprimelibros/erp/cart/CartController.java index 9c6b8bb..d72dbd1 100644 --- a/src/main/java/com/imprimelibros/erp/cart/CartController.java +++ b/src/main/java/com/imprimelibros/erp/cart/CartController.java @@ -19,6 +19,9 @@ import java.security.Principal; import java.util.List; import java.util.Locale; import java.util.Map; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + @Controller @RequestMapping("/cart") @@ -48,7 +51,13 @@ public class CartController { "cart.shipping.select-placeholder", "cart.shipping.new-address", "cart.shipping.errors.noAddressSelected", + "cart.shipping.enter-units", + "cart.shipping.units-label", + "cart.shipping.errors.units-error", + "cart.shipping.ud", + "cart.shipping.uds", "app.yes", + "app.aceptar", "app.cancelar"); Map translations = translationService.getTranslations(locale, keys); @@ -56,6 +65,8 @@ public class CartController { var items = service.listItems(Utils.currentUserId(principal), locale); model.addAttribute("items", items); + var summary = service.getCartSummary(items, locale); + model.addAttribute("cartSummary", summary); model.addAttribute("cartId", service.getOrCreateActiveCart(Utils.currentUserId(principal))); return "imprimelibros/cart/cart"; // crea esta vista si quieres (tabla simple) @@ -126,4 +137,14 @@ public class CartController { return "imprimelibros/direcciones/direccionCard :: direccionCard(direccion=${direccion})"; } + + @PostMapping("/update/{id}") + public String postMethodName(@PathVariable Long id, @RequestBody String entity) { + + + + + return entity; + } + } diff --git a/src/main/java/com/imprimelibros/erp/cart/CartService.java b/src/main/java/com/imprimelibros/erp/cart/CartService.java index b529819..9b2db65 100644 --- a/src/main/java/com/imprimelibros/erp/cart/CartService.java +++ b/src/main/java/com/imprimelibros/erp/cart/CartService.java @@ -23,7 +23,6 @@ public class CartService { private final CartRepository cartRepo; private final CartItemRepository itemRepo; private final MessageSource messageSource; - private final PresupuestoFormatter presupuestoFormatter; private final PresupuestoRepository presupuestoRepo; private final Utils utils; @@ -33,7 +32,6 @@ public class CartService { this.cartRepo = cartRepo; this.itemRepo = itemRepo; this.messageSource = messageSource; - this.presupuestoFormatter = presupuestoFormatter; this.presupuestoRepo = presupuestoRepo; this.utils = utils; } @@ -152,4 +150,29 @@ public class CartService { return resumen; } + + public Map getCartSummary(List> cartItems, Locale locale) { + + double base = 0.0; + double iva4 = 0.0; + double iva21 = 0.0; + + for (Map item : cartItems) { + Presupuesto p = presupuestoRepo.findById((Long) item.get("presupuestoId")) + .orElseThrow(() -> new IllegalStateException("Presupuesto no encontrado: " + item.get("presupuestoId"))); + base += p.getBaseImponible().doubleValue(); + iva4 += p.getIvaImporte4().doubleValue(); + iva21 += p.getIvaImporte21().doubleValue(); + } + + double total = base + iva4 + iva21; + + Map summary = new HashMap<>(); + summary.put("base", Utils.formatCurrency(base, locale)); + summary.put("iva4", Utils.formatCurrency(iva4, locale)); + summary.put("iva21", Utils.formatCurrency(iva21, locale)); + summary.put("total", Utils.formatCurrency(total, locale)); + + return summary; + } } diff --git a/src/main/java/com/imprimelibros/erp/pedido/PedidoService.java b/src/main/java/com/imprimelibros/erp/pedido/PedidoService.java new file mode 100644 index 0000000..5372c06 --- /dev/null +++ b/src/main/java/com/imprimelibros/erp/pedido/PedidoService.java @@ -0,0 +1,28 @@ +package com.imprimelibros.erp.pedido; + +import org.springframework.stereotype.Service; + +@Service +public class PedidoService { + + public int hasDescuentoFidelidad() { + // descuento entre el 1% y el 6% para clientes fidelidad (mas de 1500€ en el ultimo año) + double totalGastado = 1600.0; // Ejemplo, deberías obtenerlo del historial del cliente + if(totalGastado < 1200) { + return 0; + } else if(totalGastado >= 1200 && totalGastado < 1999) { + return 1; + } else if(totalGastado >= 2000 && totalGastado < 2999) { + return 2; + } else if(totalGastado >= 3000 && totalGastado < 3999) { + return 3; + } else if(totalGastado >= 4000 && totalGastado < 4999) { + return 4; + } else if(totalGastado >= 5000 && totalGastado < 9999) { + return 5; + } else if(totalGastado >= 10000) { + return 6; + } + return 0; + } +} diff --git a/src/main/resources/db/changelog/changesets/0005-add-carts-onlyoneshipment.yml b/src/main/resources/db/changelog/changesets/0005-add-carts-onlyoneshipment.yml new file mode 100644 index 0000000..deb12ec --- /dev/null +++ b/src/main/resources/db/changelog/changesets/0005-add-carts-onlyoneshipment.yml @@ -0,0 +1,28 @@ +databaseChangeLog: + - changeSet: + id: 0005-add-carts-onlyoneshipment + author: jjo + preConditions: + onFail: MARK_RAN + not: + columnExists: + tableName: carts + columnName: only_one_shipment + + changes: + - addColumn: + tableName: carts + columns: + - column: + name: only_one_shipment + type: TINYINT(1) + defaultValueNumeric: 1 + remarks: "Si 1, el carrito tiene la misma direccion para todos los items" + afterColumn: currency + constraints: + nullable: false + + rollback: + - dropColumn: + tableName: carts + columnName: only_one_shipment diff --git a/src/main/resources/db/changelog/changesets/0006-add-cart-direcciones.yml b/src/main/resources/db/changelog/changesets/0006-add-cart-direcciones.yml new file mode 100644 index 0000000..91d4f5c --- /dev/null +++ b/src/main/resources/db/changelog/changesets/0006-add-cart-direcciones.yml @@ -0,0 +1,81 @@ +databaseChangeLog: + - changeSet: + id: 0006-add-cart-direcciones + author: jjo + preConditions: + onFail: MARK_RAN + not: + tableExists: + tableName: cart_direcciones + + changes: + - createTable: + tableName: cart_direcciones + remarks: "Relación de direcciones y unidades por carrito/direcciones_envio" + columns: + - column: + name: id + type: BIGINT UNSIGNED AUTO_INCREMENT + constraints: + primaryKey: true + primaryKeyName: pk_cart_direcciones + + - column: + name: direccion_id + type: BIGINT + constraints: + nullable: false + + - column: + name: presupuesto_id + type: BIGINT + constraints: + nullable: true + + - column: + name: unidades + type: INT + constraints: + nullable: true + + - createIndex: + indexName: idx_cart_dir_direccion_id + tableName: cart_direcciones + columns: + - column: + name: direccion_id + + - createIndex: + indexName: idx_cart_dir_presupuesto_id + tableName: cart_direcciones + columns: + - column: + name: presupuesto_id + + - addForeignKeyConstraint: + baseTableName: cart_direcciones + baseColumnNames: direccion_id + constraintName: fk_cart_dir_direccion + referencedTableName: direcciones + referencedColumnNames: id + onDelete: CASCADE + onUpdate: CASCADE + + - addForeignKeyConstraint: + baseTableName: cart_direcciones + baseColumnNames: presupuesto_id + constraintName: fk_cart_dir_presupuesto + referencedTableName: presupuesto + referencedColumnNames: id + onDelete: SET NULL + onUpdate: CASCADE + + rollback: + - dropForeignKeyConstraint: + baseTableName: cart_direcciones + constraintName: fk_cart_dir_direccion + - dropForeignKeyConstraint: + baseTableName: cart_direcciones + constraintName: fk_cart_dir_presupuesto + - dropTable: + tableName: cart_direcciones diff --git a/src/main/resources/db/changelog/master.yml b/src/main/resources/db/changelog/master.yml index 90f38f5..95eb18c 100644 --- a/src/main/resources/db/changelog/master.yml +++ b/src/main/resources/db/changelog/master.yml @@ -6,4 +6,8 @@ databaseChangeLog: - include: file: db/changelog/changesets/0003-create-paises.yml - include: - file: db/changelog/changesets/0004-create-direcciones.yml \ No newline at end of file + 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 \ No newline at end of file diff --git a/src/main/resources/i18n/cart_es.properties b/src/main/resources/i18n/cart_es.properties index dcc9297..ffe04b7 100644 --- a/src/main/resources/i18n/cart_es.properties +++ b/src/main/resources/i18n/cart_es.properties @@ -13,14 +13,19 @@ cart.shipping.select-placeholder=Buscar en direcciones... cart.shipping.new-address=Nueva dirección cart.shipping.info=Todos los pedidos incluyen un envío gratuito a la Península y Baleares por línea de pedido. cart.shipping.order=Envío del pedido -cart.shipping.samples=Envío de pruebas -cart.shipping.onlyOneShipping=Todo el pedido se envía a una única dirección. +cart.shipping.samples=Envío de prueba +cart.shipping.onlyOneShipment=Todo el pedido se envía a una única dirección. cart.shipping.tirada=Tirada: cart.shipping.unidades=unidades cart.shipping.ud=ud. cart.shipping.uds=uds. +cart.shipping.enter-units=Introduzca el número de unidades para esta dirección: +cart.shipping.units-label=Número de unidades (máximo {max}) + +cart.shipping.errors.units-error=Por favor, introduzca un número válido entre 1 y {max}. cart.shipping.errors.noAddressSelected=Debe seleccionar una dirección de envío para el pedido. +cart.shipping.errors.fillAddressesItems=Debe seleccionar una dirección de envío para cada artículo de la cesta. cart.resumen.title=Resumen de la cesta cart.resumen.base=Base imponible: diff --git a/src/main/resources/i18n/pedidos_es.properties b/src/main/resources/i18n/pedidos_es.properties index 7cbfc47..76db42f 100644 --- a/src/main/resources/i18n/pedidos_es.properties +++ b/src/main/resources/i18n/pedidos_es.properties @@ -6,7 +6,7 @@ checkout.payment=Método de pago checkout.shipping.info=Todos los pedidos incluyen un envío gratuito a la Península y Baleares por línea de pedido. checkout.shipping.order=Envío del pedido checkout.shipping.samples=Envío de pruebas -checkout.shipping.onlyOneShipping=Todo el pedido se envía a una única dirección. +checkout.shipping.onlyOneShipment=Todo el pedido se envía a una única dirección. checkout.summary.presupuesto=#Presupuesto diff --git a/src/main/resources/static/assets/css/cart.css b/src/main/resources/static/assets/css/cart.css index dd4d314..f927b98 100644 --- a/src/main/resources/static/assets/css/cart.css +++ b/src/main/resources/static/assets/css/cart.css @@ -27,7 +27,12 @@ } .direccion-card { - flex: 1 1 250px; /* ancho mínimo 250px, crece si hay espacio */ - max-width: 250px; /* opcional, para que no se estiren demasiado */ - min-width: 240px; /* protege el ancho mínimo */ -} \ No newline at end of file + flex: 1 1 350px; /* ancho mínimo 350px, crece si hay espacio */ + max-width: 350px; /* opcional, para que no se estiren demasiado */ + min-width: 340px; /* protege el ancho mínimo */ +} + +.shipping-addresses-item { align-items: stretch; justify-content: center;} +.shipping-addresses-sample { align-items: stretch; justify-content: center;} +.direccion-card { display: flex; flex-direction: column; } +.direccion-card .card-body { display: flex; flex-direction: column; } \ No newline at end of file diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/cart/cart.js b/src/main/resources/static/assets/js/pages/imprimelibros/cart/cart.js index 5d9a0cd..40aa6ce 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/cart/cart.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/cart/cart.js @@ -8,15 +8,20 @@ $(() => { $(document).on('updateCart', () => { // get form and submit const form = $('#cartForm'); - const container = $("#onlyOneShipping").is(':checked') ? $('#shippingAddressesContainer') : $('.product'); + const container = $("#onlyOneShipment").is(':checked') ? $('#shippingAddressesContainer') : $('.product'); // remove name from container . direccion-card container.find('.direccion-card input[type="hidden"]').removeAttr('name'); container.find('.direccion-card').each(function (i) { $(this).find('.direccion-id').attr('name', 'direcciones[' + i + '].id'); $(this).find('.direccion-cp').attr('name', 'direcciones[' + i + '].cp'); - $(this).find('.direccion-pais-code3').attr('name', 'direcciones[' + i + '].pais.code3'); - // añade aquí más campos si quieres que viajen + $(this).find('.direccion-pais-code3').attr('name', 'direcciones[' + i + '].paisCode3'); + if($(this).find('.presupuesto-id').length > 0 && $(this).find('.presupuesto-id').val() !== null + && $(this).find('.presupuesto-id').val() !== "") + $(this).find('.presupuesto-id').attr('name', 'direcciones[' + i + '].presupuestoId'); + if($(this).find('.item-tirada').length > 0 && $(this).find('.item-tirada').val() !== null + && $(this).find('.item-tirada').val() !== "") + $(this).find('.item-tirada').attr('name', 'direcciones[' + i + '].tirada'); }); $.post(form.attr('action'), form.serialize(), (response) => { // handle response @@ -24,12 +29,65 @@ $(() => { hideLoader(); }); updateTotal(); + checkAddressesForItems(); }); updateTotal(); + function checkAddressesForItems(){ + if($('#onlyOneShipment').is(':checked')){ + if($("#shippingAddressesContainer .direccion-card").length === 0){ + $(".alert-shipment").removeClass("d-none"); + $('#btn-checkout').prop('disabled', true); + return; + } + $(".alert-shipment").addClass("d-none"); + $('#btn-checkout').prop('disabled', false); + } + else{ + const items = $(".product"); + let errorFound = false; + for(let i=0; i { $("#tr-iva-21").hide(); } const total = base + iva4 + iva21; - $("#total-cesta").text(formateaMoneda(total)); + $("#total-cesta").text(formateaMoneda(total));*/ } $(document).on("click", ".delete-item", async function (event) { diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/cart/shipping-cart.js b/src/main/resources/static/assets/js/pages/imprimelibros/cart/shipping-cart.js index 2c2fc9d..6af9089 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/cart/shipping-cart.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/cart/shipping-cart.js @@ -5,7 +5,7 @@ $(() => { // Si usas jQuery AJAX: $(document).ajaxStart(showLoader).ajaxStop(hideLoader); - $("#onlyOneShipping").on('change', function () { + $("#onlyOneShipment").on('change', function () { if ($(this).is(':checked')) { $('.nav-product').hide(); document.querySelectorAll('.card.product').forEach(card => { @@ -13,19 +13,19 @@ $(() => { if (detailsBtn) new bootstrap.Tab(detailsBtn).show(); }); $('#shippingAddressesContainer').empty().show(); - $('.div-shipping-product').toArray().forEach(element => { + $('.shipping-addresses-item').toArray().forEach(element => { $(element).empty().hide(); }); $('#addOrderAddress').show(); } else { $('.nav-product').show(); $('#shippingAddressesContainer').empty().hide(); - $('.div-shipping-product').toArray().forEach(element => { + $('.shipping-addresses-item').toArray().forEach(element => { $(element).empty().show(); }); - $('.div-shipping-product').empty().show(); $('#addOrderAddress').hide(); } + $(document).trigger('updateCart'); }); $(document).on('click', '.btn-delete-direccion', function (e) { @@ -33,9 +33,39 @@ $(() => { const $card = $(this).closest('.direccion-card'); const $div = $card.parent(); $card.remove(); - if($div.hasClass('shipping-order-address')){ + if ($div.hasClass('shipping-order-address')) { $('#addOrderAddress').show(); } + else { + $div.trigger('direcciones:actualizadas'); + } + $(document).trigger('updateCart'); + }); + + //btn-edit-direccion + $(document).on('click', '.btn-edit-direccion', function (e) { + e.preventDefault(); + const $card = $(this).closest('.direccion-card'); + const container = $(this).closest('.product').find('.shipping-addresses-item'); + const tirada = $(this).closest('.product').find('.item-tirada').val(); + const totalTirada = container.find('.item-tirada').toArray().reduce((acc, el) => acc + parseInt($(el).val() || 0), 0); + const remainingTirada = parseInt(tirada) - parseInt(totalTirada) + parseInt($card.find('.item-tirada').val() || 0); + const units = getUnitsFromUser(remainingTirada); + units.then(unidades => { + if (unidades) { + $card.find('.item-tirada').val(unidades); + $card.find('#units-text').each(function () { + if (unidades == 1) { + $(this).text(`${unidades} ${window.languageBundle['cart.shipping.ud'] || 'unidad'}`); + } else { + $(this).text(`${unidades} ${window.languageBundle['cart.shipping.uds'] || 'unidades'}`); + } + }); + container.trigger('direcciones:actualizadas'); + $(document).trigger('updateCart'); + } + }); + }); const language = document.documentElement.lang || 'es-ES'; @@ -55,8 +85,8 @@ $(() => { }); $('#addOrderAddress').on('click', async () => { - if ($('#onlyOneShipping').is(':checked')) { - if(await seleccionarDireccionEnvio()){ + if ($('#onlyOneShipment').is(':checked')) { + if (await seleccionarDireccionEnvio()) { $('#addOrderAddress').hide(); } } @@ -71,6 +101,14 @@ $(() => { seleccionarDireccionEnvio(presupuestoId, remainingTirada, container); }); + $(document).on('click', '.btn-add-shipping-sample', function () { + const presupuestoId = $(this).closest('.product').find('.item-presupuesto-id').val(); + const container = $(this).closest('.product').find('.shipping-addresses-sample'); + seleccionarDireccionEnvio(presupuestoId, null, container); + }); + + + async function seleccionarDireccionEnvio(presupuestoId = null, tirada = null, container = null) { const { value: direccionId, isDenied } = await Swal.fire({ @@ -144,11 +182,6 @@ $(() => { }, escapeMarkup: m => m }); - - // (Opcional) Prefijar valor si ya tienes una dirección elegida: - // const preselected = { id: '123', text: 'Oficina Central — Madrid' }; - // const option = new Option(preselected.text, preselected.id, true, true); - // $select.append(option).trigger('change'); }, preConfirm: () => { @@ -182,29 +215,9 @@ $(() => { } let unidades = null; - if(tirada !== null && tirada >= 1 && direccionId){ - // Swal preguntando numero de unidades a asignar con máximo de tirada, necesito guardar el valor - const { value: unidadesValue } = await Swal.fire({ - title: window.languageBundle['cart.shipping.enter-units'] || 'Introduzca el número de unidades para esta dirección', - input: 'number', - inputLabel: window.languageBundle['cart.shipping.units-label']?.replace('{max}', tirada) || `Número de unidades (máximo ${tirada})`, - inputAttributes: { - min: 1, - max: tirada, - step: 1, - value: tirada - }, - inputValue: 1, - showCancelButton: true, - confirmButtonText: window.languageBundle['app.ok'] || 'Aceptar', - cancelButtonText: window.languageBundle['app.cancel'] || 'Cancelar', - inputValidator: (value) => { - if (!value || isNaN(value) || value < 1 || value > tirada) { - return window.languageBundle['cart.shipping.units-error']?.replace('{max}', tirada) || `Por favor, introduzca un número válido entre 1 y ${tirada}.`; - } - return null; - } - }); + if (tirada !== null && tirada >= 1 && direccionId) { + + const unidadesValue = await getUnitsFromUser(tirada); if (unidadesValue) { unidades = parseInt(unidadesValue); } else { @@ -216,16 +229,19 @@ $(() => { // Obtén el objeto completo seleccionado showLoader(); let uri = `/cart/get-address/${direccionId}`; - if (presupuestoId !== null && unidades !== null) { - uri += `?presupuestoId=${presupuestoId}&unidades=${unidades}`; + if (presupuestoId !== null) { + uri += `?presupuestoId=${presupuestoId}`; + if (tirada !== null) { + uri += `&unidades=${unidades}`; + } } const response = await fetch(uri); if (response.ok) { const html = await response.text(); - if(presupuestoId !== null){ - container.append(html); + if (presupuestoId !== null) { + container.append(html).trigger('direcciones:actualizadas'); } - else{ + else { $('#shippingAddressesContainer').append(html); } $(document).trigger('updateCart'); @@ -238,6 +254,78 @@ $(() => { return false; } + async function getUnitsFromUser(tirada) { + + // Swal preguntando numero de unidades a asignar con máximo de tirada, necesito guardar el valor + const { value: unidadesValue } = await Swal.fire({ + title: window.languageBundle['cart.shipping.enter-units'] || 'Introduzca el número de unidades para esta dirección', + input: 'number', + inputLabel: window.languageBundle['cart.shipping.units-label']?.replace('{max}', tirada) || `Número de unidades (máximo ${tirada})`, + inputAttributes: { + min: 1, + max: tirada, + step: 1, + }, + inputValue: tirada, + showCancelButton: true, + buttonsStyling: false, + customClass: { + confirmButton: 'btn btn-secondary me-2', + cancelButton: 'btn btn-light', + }, + confirmButtonText: window.languageBundle['app.aceptar'] || 'Aceptar', + cancelButtonText: window.languageBundle['app.cancelar'] || 'Cancelar', + inputValidator: (value) => { + if (!value || isNaN(value) || value < 1 || value > tirada) { + return window.languageBundle['cart.shipping.errors.units-error']?.replace('{max}', tirada) || `Por favor, introduzca un número válido entre 1 y ${tirada}.`; + } + return null; + } + }); + return unidadesValue; + } + + function checkTotalUnits(container, tirada) { + + const totalUnits = container.find('.direccion-card').toArray().reduce((acc, el) => { + const unidades = parseInt($(el).find('.item-tirada').val()) || 0; + return acc + unidades; + }, 0); + if (totalUnits < tirada) { + return false; + } + if(container.find('.product').closest('.shipping-addresses-sample')){ + if(container.find('.direccion-card').toArray().length === 0){ + return false; + } + } + return true; + } + + $(document).on('direcciones:actualizadas', '.shipping-addresses-item', function (e) { + + const tirada = $(this).closest('.product').find('.item-tirada').val(); + const container = $(this); + + if (!checkTotalUnits(container, tirada)) { + container.closest('.px-2').find('.btn-add-shipping').show(); + } else { + container.closest('.px-2').find('.btn-add-shipping').hide(); + } + }); + + $(document).on('direcciones:actualizadas', '.shipping-addresses-sample', function (e) { + + const container = $(this); + + if (container.find('.direccion-card').toArray().length === 0) { + container.closest('.px-2').find('.btn-add-shipping-sample').show(); + } + else { + container.closest('.px-2').find('.btn-add-shipping-sample').hide(); + } + }); + $(document).on('submit', '#direccionForm', function (e) { e.preventDefault(); const $form = $(this); diff --git a/src/main/resources/templates/imprimelibros/cart/_cartContent.html b/src/main/resources/templates/imprimelibros/cart/_cartContent.html new file mode 100644 index 0000000..61b7862 --- /dev/null +++ b/src/main/resources/templates/imprimelibros/cart/_cartContent.html @@ -0,0 +1,46 @@ +
+ +
+
+ Cargando… +
+
+ +
+ +
+ + + +
+ + + +
+
+

+
+ + +
+ + +
+ +
+
+ +
+
+
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/imprimelibros/cart/_cartItem.html b/src/main/resources/templates/imprimelibros/cart/_cartItem.html index 2d33338..6f963aa 100644 --- a/src/main/resources/templates/imprimelibros/cart/_cartItem.html +++ b/src/main/resources/templates/imprimelibros/cart/_cartItem.html @@ -27,6 +27,8 @@ + @@ -143,7 +145,12 @@
+
+ +
+
diff --git a/src/main/resources/templates/imprimelibros/cart/_cartSummary.html b/src/main/resources/templates/imprimelibros/cart/_cartSummary.html new file mode 100644 index 0000000..3caadb7 --- /dev/null +++ b/src/main/resources/templates/imprimelibros/cart/_cartSummary.html @@ -0,0 +1,48 @@ +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
:
:
: + +
+ +
+ +
+
+ + +
+ + +
\ No newline at end of file diff --git a/src/main/resources/templates/imprimelibros/cart/cart.html b/src/main/resources/templates/imprimelibros/cart/cart.html index c8235fd..0170d5b 100644 --- a/src/main/resources/templates/imprimelibros/cart/cart.html +++ b/src/main/resources/templates/imprimelibros/cart/cart.html @@ -36,100 +36,7 @@ -
- -
-
- Cargando… -
-
- -
- -
- -
- - - -
-
-

-
- - -
- - -
- -
-
- -
-
-
- -
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - -
:
:
: - - - -
- -
- -
-
- - -
- - -
- -
+
diff --git a/src/main/resources/templates/imprimelibros/checkout/_envio.html b/src/main/resources/templates/imprimelibros/checkout/_envio.html index 15687fa..893721c 100644 --- a/src/main/resources/templates/imprimelibros/checkout/_envio.html +++ b/src/main/resources/templates/imprimelibros/checkout/_envio.html @@ -12,10 +12,10 @@

- -