terminado

This commit is contained in:
2025-12-29 21:28:48 +01:00
parent 47866ddead
commit 1ba1b28793
8 changed files with 2123 additions and 14 deletions

View File

@ -56,11 +56,16 @@ pedido.view.aceptar-ferro=Aceptar ferro
pedido.view.ferro-download=Descargar ferro
pedido.view.cub-download=Descargar cubierta
pedido.view.tapa-download=Descargar tapa
pedido.view.admin-actions=Acciones de administrador
pedido.view.cancel-title=¿Estás seguro de que deseas cancelar este pedido?
pedido.view.cancel-text=Esta acción no se puede deshacer.
pedido.errors.linea-not-found=No se ha encontrado la línea de pedido.
pedido.errors.cancel-pedido=Error al cancelar el pedido
pedido.errors.state-error=Estado de línea no válido.
pedido.errors.update-server-error=Error al actualizar el estado desde el servidor externo.
pedido.errors.connecting-server-error=Error al conectar con el servidor externo.
pedido.errors.cannot-update=No se puede actualizar el estado de una línea con ese estado inicial.
pedido.success.estado-actualizado=Estado del pedido actualizado correctamente.
pedido.success.same-estado=Sin cambios en el estado.
pedido.success.same-estado=Sin cambios en el estado.
pedido.success.pedido-cancelado=Pedido cancelado correctamente.

View File

@ -141,6 +141,79 @@ $(() => {
});
}
});
});
$(document).on('click', '.btn-cancel-pedido', function () {
const pedidoId = $(this).data('pedido-id');
if (!pedidoId) {
console.error('No se ha encontrado el ID del pedido.');
return;
}
Swal.fire({
title: window.languageBundle['pedido.view.cancel-title'] || '¿Estás seguro de que deseas cancelar este pedido?',
text: window.languageBundle['pedido.view.cancel-text'] || "Esta acción no se puede deshacer.",
icon: 'warning',
showCancelButton: true,
confirmButtonText: window.languageBundle['app.yes'] || 'Sí, cancelar pedido',
cancelButtonText: window.languageBundle['app.cancel'] || 'No, mantener pedido',
buttonsStyling: false,
customClass: {
confirmButton: 'btn btn-danger me-2',
cancelButton: 'btn btn-light'
}
}).then((result) => {
if (result.isConfirmed) {
// Llamada AJAX para cancelar el pedido
$.ajax({
url: `/pedidos/cancel/${pedidoId}`,
type: 'POST',
success: function (response) {
if (!response || !response.success) {
Swal.fire({
icon: 'error',
title: response.message || "Error",
timer: 1800,
buttonsStyling: false,
customClass: {
confirmButton: 'btn btn-secondary me-2',
cancelButton: 'btn btn-light'
},
showConfirmButton: false
});
}
else {
Swal.fire({
icon: 'success',
title: response.message || "Éxito",
timer: 1800,
buttonsStyling: false,
customClass: {
confirmButton: 'btn btn-secondary me-2',
cancelButton: 'btn btn-light'
},
showConfirmButton: false
}).then((result) => {
if (result.dismiss === Swal.DismissReason.timer) {
location.reload();
}
});
}
},
error: function (xhr, status, error) {
console.error('Error al cancelar el pedido:', error);
Swal.fire({
icon: 'error',
title: xhr.responseJSON?.message || 'Error',
buttonsStyling: false,
customClass: {
confirmButton: 'btn btn-secondary me-2', // clases para el botón confirmar
cancelButton: 'btn btn-light' // clases para cancelar
}
});
}
});
}
});
});
})

View File

@ -134,14 +134,6 @@
<div class="row align-items-center gy-3">
<div class="col-sm">
<div class="d-flex flex-wrap my-n1">
<!-- Botón cancelar -->
<div th:if="${item.estado.name != 'cancelado' && item.estado.name != 'terminado'}">
<a href="javascript:void(0);" class="d-block text-body p-1 px-2 cancel-item"
th:attr="data-linea-id=${item.lineaId}">
<i class="ri-delete-bin-fill text-muted align-bottom me-1"><span
th:text="#{pedido.cancelar}">Cancelar Pedido</span></i>
</a>
</div>
<!-- Actualizar estado-->
<div class="update-estado-button"
th:if="${item.estado.name != 'cancelado' && item.estado.name != 'maquetacion' && item.estado.name != 'terminado'}">

View File

@ -38,15 +38,33 @@
<div class="row">
<div class="col-12 col-md-auto">
<div th:insert="~{imprimelibros/direcciones/direccionFacturacionCard ::
direccionFacturacionCard(
direccion=${direccionFacturacion},
pais=${direccionFacturacion != null ? direccionFacturacion.paisNombre : ''}
)}">
direccionFacturacionCard(
direccion=${direccionFacturacion},
pais=${direccionFacturacion != null ? direccionFacturacion.paisNombre : ''}
)}">
</div>
</div>
<th:block th:if="${isAdmin and showCancel}">
<div sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')"
class="col-12 col-md-auto">
<div class="card card border mb-3 admin-actions">
<div class="card-header bg-light">
<span class="fs-16" th:text="#{'pedido.view.admin-actions'}"></span>
</div>
<div class="card-body">
<button type="button" class="btn btn-danger w-100 btn-cancel-pedido"
th:text="#{pedido.cancelar}" th:attr="data-pedido-id=${id}">
Cancelar pedido
</button>
</div>
</div>
</div>
</th:block>
</div>
<th:block th:each="linea: ${lineas}">
<div
th:insert="~{imprimelibros/pedidos/pedidos-linea :: pedido-linea (item=${linea}, isAdmin=${isAdmin})}">
@ -76,7 +94,8 @@
<script th:src="@{/assets/libs/datatables/buttons.colVis.min.js}"></script>
<script type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-view.js}"></script>
<script th:if="${isAdmin}" type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-view-admin.js}"></script>
<script th:if="${isAdmin}" type="module"
th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-view-admin.js}"></script>
</th:block>
</body>