mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-13 00:48:49 +00:00
haciendo vista de pagos
This commit is contained in:
@ -0,0 +1,20 @@
|
|||||||
|
package com.imprimelibros.erp.payments;
|
||||||
|
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/pagos")
|
||||||
|
@PreAuthorize("hasRole('SUPERADMIN')")
|
||||||
|
public class PaymentController {
|
||||||
|
|
||||||
|
@GetMapping()
|
||||||
|
public String index() {
|
||||||
|
return "imprimelibros/pagos/gestion-pagos";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -187,7 +187,7 @@ public class PaymentService {
|
|||||||
p.setStatus(PaymentStatus.failed);
|
p.setStatus(PaymentStatus.failed);
|
||||||
p.setFailedAt(LocalDateTime.now());
|
p.setFailedAt(LocalDateTime.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
payRepo.save(p);
|
payRepo.save(p);
|
||||||
|
|
||||||
if (!authorized) {
|
if (!authorized) {
|
||||||
|
|||||||
@ -23,5 +23,6 @@ app.sidebar.configuracion=Configuración
|
|||||||
app.sidebar.usuarios=Usuarios
|
app.sidebar.usuarios=Usuarios
|
||||||
app.sidebar.direcciones=Mis Direcciones
|
app.sidebar.direcciones=Mis Direcciones
|
||||||
app.sidebar.direcciones-admin=Administrar Direcciones
|
app.sidebar.direcciones-admin=Administrar Direcciones
|
||||||
|
app.sidebar.gestion-pagos=Gestión de Pagos
|
||||||
|
|
||||||
app.errors.403=No tienes permiso para acceder a esta página.
|
app.errors.403=No tienes permiso para acceder a esta página.
|
||||||
0
src/main/resources/i18n/pagos_en.properties
Normal file
0
src/main/resources/i18n/pagos_en.properties
Normal file
4
src/main/resources/i18n/pagos_es.properties
Normal file
4
src/main/resources/i18n/pagos_es.properties
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
pagos.module-title=Gestión de Pagos
|
||||||
|
|
||||||
|
pagos.tab.movimientos-redsys=Movimientos Redsys
|
||||||
|
pagos.tab.transferencias-bancarias=Transferencias Bancarias
|
||||||
@ -422,7 +422,7 @@ $(() => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Éxito real: cerrar y recargar tabla
|
// Éxito real: cerrar y recargar tabla
|
||||||
modal.addClass('d-none');
|
$('#direccionFormModal').modal('hide');
|
||||||
seleccionarDireccionEnvio();
|
seleccionarDireccionEnvio();
|
||||||
},
|
},
|
||||||
error: function (xhr) {
|
error: function (xhr) {
|
||||||
@ -432,7 +432,6 @@ $(() => {
|
|||||||
const isEdit = $('#direccionFormModalBody #direccionForm input[name="_method"][value="PUT"]').length > 0;
|
const isEdit = $('#direccionFormModalBody #direccionForm input[name="_method"][value="PUT"]').length > 0;
|
||||||
const title = $('#direccionFormModalBody #direccionForm').data(isEdit ? 'edit' : 'add');
|
const title = $('#direccionFormModalBody #direccionForm').data(isEdit ? 'edit' : 'add');
|
||||||
$('#direccionModal .modal-title').text(title);
|
$('#direccionModal .modal-title').text(title);
|
||||||
initSelect2Cliente(true);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Fallback
|
// Fallback
|
||||||
|
|||||||
@ -153,10 +153,59 @@ $(() => {
|
|||||||
$('#btn-checkout').prop('disabled', true);
|
$('#btn-checkout').prop('disabled', true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$('input[name="paymentMethod"]').on('change', function() {
|
$('input[name="paymentMethod"]').on('change', function () {
|
||||||
const method = $(this).val();
|
const method = $(this).val();
|
||||||
// set the hidden input value in the form
|
// set the hidden input value in the form
|
||||||
$('input[name="method"]').val(method);
|
$('input[name="method"]').val(method);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(document).on("change", ".direccionFacturacion", function () {
|
||||||
|
const isChecked = $(this).is(':checked');
|
||||||
|
if (isChecked) {
|
||||||
|
$('.direccionFacturacionItems').removeClass('d-none');
|
||||||
|
} else {
|
||||||
|
$('.direccionFacturacionItems').addClass('d-none');
|
||||||
|
$('#razonSocial').val('');
|
||||||
|
$('#tipoIdentificacionFiscal').val('DNI');
|
||||||
|
$('#identificacionFiscal').val('');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('submit', '#direccionForm', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
const $form = $(this);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: $form.attr('action'),
|
||||||
|
type: 'POST', // PUT simulado via _method
|
||||||
|
data: $form.serialize(),
|
||||||
|
dataType: 'html',
|
||||||
|
success: function (html) {
|
||||||
|
// Si por cualquier motivo llega 200 con fragmento, lo insertamos igual
|
||||||
|
if (typeof html === 'string' && html.indexOf('id="direccionForm"') !== -1 && html.indexOf('<html') === -1) {
|
||||||
|
$('#direccionFormModalBody').html(html);
|
||||||
|
const isEdit = $('#direccionFormModalBody #direccionForm input[name="_method"][value="PUT"]').length > 0;
|
||||||
|
const title = $('#direccionFormModalBody #direccionForm').data(isEdit ? 'edit' : 'add');
|
||||||
|
$('#direccionModal .modal-title').text(title);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Éxito real: cerrar y recargar tabla
|
||||||
|
$('#direccionFormModal').modal('hide');
|
||||||
|
seleccionarDireccionEnvio();
|
||||||
|
},
|
||||||
|
error: function (xhr) {
|
||||||
|
// Con 422 devolvemos el fragmento con errores aquí
|
||||||
|
if (xhr.status === 422 && xhr.responseText) {
|
||||||
|
$('#direccionFormModalBody').html(xhr.responseText);
|
||||||
|
const isEdit = $('#direccionFormModalBody #direccionForm input[name="_method"][value="PUT"]').length > 0;
|
||||||
|
const title = $('#direccionFormModalBody #direccionForm').data(isEdit ? 'edit' : 'add');
|
||||||
|
$('#direccionModal .modal-title').text(title);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Fallback
|
||||||
|
$('#direccionFormModalBody').html('<div class="p-3 text-danger">Error inesperado.</div>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -181,7 +181,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Submit del form en el modal
|
// Submit del form en el modal
|
||||||
$(document).on('submit', '#direccionForm', function (e) {
|
$(document).on('submit', '#direccionForm', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const $form = $(this);
|
const $form = $(this);
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,3 @@
|
|||||||
|
$(()=>{
|
||||||
|
|
||||||
|
})
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
|
layout:decorate="~{imprimelibros/layout}">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<th:block layout:fragment="pagetitle" />
|
||||||
|
<th:block th:replace="~{imprimelibros/partials/head-css :: head-css}" />
|
||||||
|
<th:block layout:fragment="pagecss">
|
||||||
|
<link th:href="@{/assets/libs/datatables/dataTables.bootstrap5.min.css}" rel="stylesheet" />
|
||||||
|
</th:block>
|
||||||
|
<th:block layout:fragment="pagecss">
|
||||||
|
</th:block>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div th:replace="~{imprimelibros/partials/topbar :: topbar}" />
|
||||||
|
<div th:replace="~{imprimelibros/partials/sidebar :: sidebar}"
|
||||||
|
sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')">
|
||||||
|
|
||||||
|
<th:block layout:fragment="content">
|
||||||
|
<div th:if="${#authorization.expression('isAuthenticated()')}">
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li class="breadcrumb-item"><a href="/"><i class="ri-home-5-fill"></i></a></li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page" th:text="#{pagos.module-title}">
|
||||||
|
Gestión de Pagos</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
|
||||||
|
<div th:if="${errorMessage}" class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||||
|
<span th:text="${errorMessage}"></span>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="nav nav-pills arrow-navtabs nav-secondary-outline bg-light mb-3" role="tablist"
|
||||||
|
sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<a class="nav-link active" data-bs-toggle="tab" href="#arrow-redsys" role="tab"
|
||||||
|
aria-selected="true">
|
||||||
|
<span class="d-block d-sm-none"><i class="mdi mdi-home-variant"></i></span>
|
||||||
|
<span class="d-none d-sm-block" th:text="#{pagos.tab.movimientos-redsys}">Movimientos
|
||||||
|
Redsys</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<a class="nav-link" data-bs-toggle="tab" href="#arrow-transferencias" role="tab"
|
||||||
|
aria-selected="false" tabindex="-1">
|
||||||
|
<span class="d-block d-sm-none"><i class="mdi mdi-account"></i></span>
|
||||||
|
<span class="d-none d-sm-block"
|
||||||
|
th:text="#{pagos.tab.transferencias-bancarias}">Transferencias bancarias</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<!-- Tab panes -->
|
||||||
|
<div class="tab-content text-muted">
|
||||||
|
<div class="tab-pane active show" id="arrow-redsys" role="tabpanel">
|
||||||
|
<!---
|
||||||
|
<div
|
||||||
|
th:insert="~{imprimelibros/presupuestos/presupuesto-list-items/tabla-cliente :: tabla-cliente}">
|
||||||
|
</div>
|
||||||
|
--->
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="arrow-transferencias" role="tabpanel">
|
||||||
|
<!---
|
||||||
|
<div
|
||||||
|
th:insert="~{imprimelibros/presupuestos/presupuesto-list-items/tabla-anonimos :: tabla-anonimos}">
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</th:block>
|
||||||
|
|
||||||
|
<th:block th:replace="~{theme/partials/vendor-scripts :: scripts}" />
|
||||||
|
<th:block layout:fragment="pagejs">
|
||||||
|
<script th:inline="javascript">
|
||||||
|
window.languageBundle = /*[[${languageBundle}]]*/ {};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module" th:src="@{/assets/js/pages/imprimelibros/pagos/pagos.js}"></script>
|
||||||
|
</th:block>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@ -53,6 +53,14 @@
|
|||||||
th:text="#{app.sidebar.direcciones}">Mis Direcciones</span>
|
th:text="#{app.sidebar.direcciones}">Mis Direcciones</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link menu-link" href="/pagos" th:if="${#authentication.principal.role == 'SUPERADMIN'}">
|
||||||
|
<i class="ri-money-euro-box-line"></i>
|
||||||
|
<span
|
||||||
|
th:text="#{app.sidebar.gestion-pagos}">Administrar Pagos</span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li th:if="${#authentication.principal.role == 'SUPERADMIN' or #authentication.principal.role == 'ADMIN'}" class="nav-item">
|
<li th:if="${#authentication.principal.role == 'SUPERADMIN' or #authentication.principal.role == 'ADMIN'}" class="nav-item">
|
||||||
<a class="nav-link menu-link collapsed" href="#sidebarConfig" data-bs-toggle="collapse"
|
<a class="nav-link menu-link collapsed" href="#sidebarConfig" data-bs-toggle="collapse"
|
||||||
role="button" aria-expanded="false" aria-controls="sidebarConfig">
|
role="button" aria-expanded="false" aria-controls="sidebarConfig">
|
||||||
|
|||||||
Reference in New Issue
Block a user