trabajando en el datatables de los presupuestos

This commit is contained in:
2025-10-06 15:32:50 +02:00
parent b2f3ef042e
commit 1e8f9cafb3
27 changed files with 513 additions and 36 deletions

View File

@ -29,21 +29,24 @@
<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="#{margenes-presupuesto.breadcrumb}">Márgenes de presupuesto</li>
<li class="breadcrumb-item active" aria-current="page" th:text="#{margenes-presupuesto.breadcrumb}">
Márgenes de presupuesto</li>
</ol>
</nav>
<div class="container-fluid">
<button type="button" class="btn btn-secondary mb-3" id="addButton">
<i class="ri-add-line align-bottom me-1"></i> <span th:text="#{margenes-presupuesto.add}">Añadir</span>
<i class="ri-add-line align-bottom me-1"></i> <span
th:text="#{margenes-presupuesto.add}">Añadir</span>
</button>
<table id="margenes-datatable" class="table table-striped table-nowrap responsive w-100">
<thead>
<tr>
<th scope="col" th:text="#{margenes-presupuesto.tabla.id}">ID</th>
<th scope="col" th:text="#{margenes-presupuesto.tabla.tipo_encuadernacion}">Tipo encuadernación</th>
<th scope="col" th:text="#{margenes-presupuesto.tabla.tipo_encuadernacion}">Tipo
encuadernación</th>
<th scope="col" th:text="#{margenes-presupuesto.tabla.tipo_cubierta}">Tipo cubierta</th>
<th scope="col" th:text="#{margenes-presupuesto.tabla.tirada_minima}">Tirada Mín.</th>
<th scope="col" th:text="#{margenes-presupuesto.tabla.tirada_maxima}">Tirada Máx.</th>
@ -52,9 +55,11 @@
<th scope="col" th:text="#{margenes-presupuesto.tabla.acciones}">Acciones</th>
</tr>
<tr>
<th><input type="text" class="form-control form-control-sm margenes-presupuesto-filter" data-col="id" /></th>
<th><input type="text" class="form-control form-control-sm margenes-presupuesto-filter"
data-col="id" /></th>
<th>
<select class="form-select form-select-sm margenes-presupuesto-select-filter" id="search-encuadernacion">
<select class="form-select form-select-sm margenes-presupuesto-select-filter"
id="search-encuadernacion">
<option value="" th:text="#{margenes-presupuesto.todos}">Todos</option>
<option value="fresado" th:text="#{presupuesto.fresado}">Fresado</option>
<option value="cosido" th:text="#{presupuesto.cosido}">Cosido</option>
@ -64,24 +69,30 @@
</select>
</th>
<th>
<select class="form-select form-select-sm margenes-presupuesto-select-filter" id="search-cubierta">
<select class="form-select form-select-sm margenes-presupuesto-select-filter"
id="search-cubierta">
<option value="" th:text="#{margenes-presupuesto.todos}">Todos</option>
<option value="tapaBlanda" th:text="#{presupuesto.tapa-blanda}"></option>
<option value="tapaDura" th:text="#{presupuesto.tapa-dura}"></option>
<option value="tapaDuraLomoRedondo" th:text="#{presupuesto.tapa-dura-lomo-redondo}"></option>
<option value="tapaDuraLomoRedondo" th:text="#{presupuesto.tapa-dura-lomo-redondo}">
</option>
</select>
</th>
<th>
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter" data-col="tiradaMin" />
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter"
data-col="tiradaMin" />
</th>
<th>
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter" data-col="tiradaMax" />
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter"
data-col="tiradaMax" />
</th>
<th>
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter" data-col="margenMax" />
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter"
data-col="margenMax" />
</th>
<th>
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter" data-col="margenMin" />
<input type="text" class="form-control form-control-sm margenes-presupuesto-filter"
data-col="margenMin" />
</th>
<th></th>
</tr>
@ -101,7 +112,18 @@
</script>
<script th:src="@{/assets/libs/datatables/datatables.min.js}"></script>
<script th:src="@{/assets/libs/datatables/dataTables.bootstrap5.min.js}"></script>
<!-- JS de Buttons y dependencias -->
<script th:src="@{/assets/libs/datatables/dataTables.buttons.min.js}"></script>
<script th:src="@{/assets/libs/jszip/jszip.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/pdfmake.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/vfs_fonts.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.html5.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.print.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.colVis.min.js}"></script>
<script th:src="@{/assets/js/pages/imprimelibros/configuracion/margenes-presupuesto/list.js}"></script>
</th:block>
</body>

View File

@ -22,8 +22,7 @@
</span>
</a>
<button type="button" class="btn btn-sm p-0 fs-20 header-item float-end btn-vertical-sm-hover"
id="vertical-hover"
href="/#" data-bs-toggle="tooltip" data-bs-placement="right" title="Expand">
id="vertical-hover" href="/#" data-bs-toggle="tooltip" data-bs-placement="right" title="Expand">
<i class="ri-record-circle-line"></i>
</button>
</div>
@ -40,23 +39,35 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link menu-link" href="/users">
<i class="ri-user-line"></i> <span th:text="#{app.sidebar.usuarios}">Usuarios</span>
<a class="nav-link menu-link" href="/presupuesto">
<i class="ri-file-paper-2-line"></i> <span th:text="#{app.sidebar.presupuestos}">Presupuestos</span>
</a>
</li>
<div th:if="${#authentication.principal.role == 'SUPERADMIN'}">
<li class="nav-item">
<a class="nav-link menu-link collapsed" href="#sidebarConfig" data-bs-toggle="collapse" role="button" aria-expanded="false" aria-controls="sidebarConfig">
<i class="ri-settings-2-line"></i> <span th:text="#{app.sidebar.configuracion}">Configuración</span>
</a>
<a class="nav-link menu-link collapsed" href="#sidebarConfig" data-bs-toggle="collapse"
role="button" aria-expanded="false" aria-controls="sidebarConfig">
<i class="ri-settings-2-line"></i> <span
th:text="#{app.sidebar.configuracion}">Configuración</span>
</a>
<div class="collapse menu-dropdown" id="sidebarConfig">
<ul class="nav nav-sm flex-column">
<li class="nav-item">
<a href="/configuracion/margenes-presupuesto" class="nav-link" th:text="#{margenes-presupuesto.titulo}">Márgenes de presupuesto</a>
<a class="nav-link menu-link" href="/users">
<i class="ri-user-line"></i> <span
th:text="#{app.sidebar.usuarios}">Usuarios</span>
</a>
</li>
<div th:if="${#authentication.principal.role == 'SUPERADMIN'}">
<li class="nav-item">
<a href="/configuracion/margenes-presupuesto" class="nav-link">
<i class="ri-discount-percent-line"></i>
<span th:text="#{margenes-presupuesto.titulo}">Márgenes de presupuesto</span>
</a>
</li>
</div>
</ul>
</li>
</div>
</ul>
</div>
<!-- Sidebar -->

View File

@ -0,0 +1,28 @@
<div th:fragment="tabla-anonimos">
<table id="presupuesto-anonimos-datatable" class="table table-striped table-nowrap responsive w-100">
<thead>
<tr>
<th scope="col" th:text="#{presupuesto.tabla.id}">ID</th>
<th scope="col" th:text="#{presupuesto.tabla.titulo}">Título</th>
<th scope="col" th:text="#{presupuesto.tabla.cliente}">Cliente</th>
<th scope="col" th:text="#{presupuesto.tabla.encuadernacion}">Encuadernación</th>
<th scope="col" th:text="#{presupuesto.tabla.cubierta}">Cubierta</th>
<th scope="col" th:text="#{presupuesto.tabla.tipo-impresion}">Tipo de impresión</th>
<th scope="col" th:text="#{presupuesto.tabla.tirada}">Tirada</th>
<th scope="col" th:text="#{presupuesto.tabla.paginas}">Páginas</th>
<th scope="col" th:text="#{presupuesto.tabla.estado}">Estado</th>
<th scope="col" th:text="#{presupuesto.tabla.total-iva}">Total con IVA</th>
<th scope="col" th:text="#{presupuesto.tabla.pais}">País</th>
<th scope="col" th:text="#{presupuesto.tabla.region}">Región</th>
<th scope="col" th:text="#{presupuesto.tabla.ciudad}">Ciudad</th>
<th scope="col" th:text="#{presupuesto.tabla.updated-at}">Actualizado el</th>
<th scope="col" th:text="#{presupuesto.tabla.acciones}">Acciones</th>
</tr>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>

View File

@ -0,0 +1,25 @@
<div th:fragment="tabla-cliente">
<table id="presupuesto-clientes-datatable" class="table table-striped table-nowrap responsive w-100">
<thead>
<tr>
<th scope="col" th:text="#{presupuesto.tabla.id}">ID</th>
<th scope="col" th:text="#{presupuesto.tabla.titulo}">Título</th>
<th scope="col" th:text="#{presupuesto.tabla.cliente}">Cliente</th>
<th scope="col" th:text="#{presupuesto.tabla.encuadernacion}">Encuadernación</th>
<th scope="col" th:text="#{presupuesto.tabla.cubierta}">Cubierta</th>
<th scope="col" th:text="#{presupuesto.tabla.tipo-impresion}">Tipo de impresión</th>
<th scope="col" th:text="#{presupuesto.tabla.tirada}">Tirada</th>
<th scope="col" th:text="#{presupuesto.tabla.paginas}">Páginas</th>
<th scope="col" th:text="#{presupuesto.tabla.estado}">Estado</th>
<th scope="col" th:text="#{presupuesto.tabla.total-iva}">Total con IVA</th>
<th scope="col" th:text="#{presupuesto.tabla.updated-at}">Actualizado el</th>
<th scope="col" th:text="#{presupuesto.tabla.acciones}">Acciones</th>
</tr>
<tr>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>

View File

@ -0,0 +1,99 @@
<!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>
</head>
<body>
<div th:replace="~{imprimelibros/partials/topbar :: topbar}" />
<div th:replace="~{imprimelibros/partials/sidebar :: sidebar}"
th:unless="${#authorization.expression('isAuthenticated()') and (#authorization.expression('hasRole('SUPERADMIN', 'ADMIN')'))}" />
<th:block layout:fragment="content">
<div th:if="${#authorization.expression('isAuthenticated()')}">
<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="#{presupuesto.title}">Presupuestos
</li>
</ol>
</nav>
<div class="container-fluid">
<button type="button" class="btn btn-secondary mb-3" id="addPresupuestoButton">
<i class="ri-add-line align-bottom me-1"></i> <span th:text="#{presupuesto.add}">Añadir
presupuesto</span>
</button>
<ul class="nav nav-pills arrow-navtabs nav-secondary-outline bg-light mb-3" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" data-bs-toggle="tab" href="#arrow-presupuestos-cliente" 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="#{presupuesto.nav.presupuestos-cliente}">Presupuestos cliente</span>
</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" data-bs-toggle="tab" href="#arrow-presupuestos-anonimos" 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="#{presupuesto.nav.presupuestos-anonimos}">Presupuestos anónimos</span>
</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content text-muted">
<div class="tab-pane active show" id="arrow-presupuestos-cliente" role="tabpanel">
<div
th:insert="~{imprimelibros/presupuestos/presupuesto-list-items/tabla-cliente :: tabla-cliente}">
</div>
</div>
<div class="tab-pane" id="arrow-presupuestos-anonimos" 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 th:src="@{/assets/libs/datatables/datatables.min.js}"></script>
<script th:src="@{/assets/libs/datatables/dataTables.bootstrap5.min.js}"></script>
<!-- JS de Buttons y dependencias -->
<script th:src="@{/assets/libs/datatables/dataTables.buttons.min.js}"></script>
<script th:src="@{/assets/libs/jszip/jszip.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/pdfmake.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/vfs_fonts.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.html5.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.print.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.colVis.min.js}"></script>
<script th:src="@{/assets/js/pages/imprimelibros/presupuestos/list.js}"></script>
</th:block>
</body>
</html>

View File

@ -90,6 +90,16 @@
</script>
<script th:src="@{/assets/libs/datatables/datatables.min.js}"></script>
<script th:src="@{/assets/libs/datatables/dataTables.bootstrap5.min.js}"></script>
<!-- JS de Buttons y dependencias -->
<script th:src="@{/assets/libs/datatables/dataTables.buttons.min.js}"></script>
<script th:src="@{/assets/libs/jszip/jszip.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/pdfmake.min.js}"></script>
<script th:src="@{/assets/libs/pdfmake/vfs_fonts.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.html5.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.print.min.js}"></script>
<script th:src="@{/assets/libs/datatables/buttons.colVis.min.js}"></script>
<script th:src="@{/assets/js/pages/imprimelibros/users/list.js}"></script>
</th:block>
</body>