primera version final del presupuesto

This commit is contained in:
2025-10-17 09:21:31 +02:00
parent ea8a005cde
commit 46715d1017
11 changed files with 323 additions and 73 deletions

View File

@ -68,17 +68,37 @@
<span class="val" th:text="${titulo} ?: '-'">Libro de prueba</span>
</div>
<!-- DATOS TÉCNICOS EN 2 COLUMNAS -->
<!-- DATOS TÉCNICOS -->
<div class="line-title">
<span class="lbl" th:text="#{pdf.presupuesto.descripcion}">Descripción:</span>
</div>
<div class="specs-wrapper align-with-text ">
<div class="specs">
<div th:utext="${especificaciones} ?: '<em>Sin especificaciones técnicas.</em>'">
<div th:if="${specs} == null">
<em>Sin especificaciones técnicas.</em>
</div>
</div>
</div> <!-- .specs-wrapper -->
<div th:if="${specs} != null">
<div th:each="spec : ${specs.lineas}" class="spec-row mb-1">
<span class="spec-label" th:utext="${spec.descripcion}"></span>
</div>
<div th:if="${specs.servicios != null}" class="spec-row mb-1">
<span th:utext="#{pdf.servicios-adicionales}">Servicios adicionales</span>
<span class="spec-label" th:text="${specs.servicios}"></span>
</div>
<div th:if="${specs.datosMaquetacion != null}" class="spec-row mb-1">
<span th:text="#{pdf.datos-maquetacion}">Datos de maquetación:</span>
<span th:utext="${specs.datosMaquetacion}"></span>
</div>
<div th:if="${specs.datosMarcapaginas != null}" class="spec-row mb-1">
<span th:text="#{pdf.datos-marcapaginas}">Datos de marcapáginas:</span>
<span th:utext="${specs.datosMarcapaginas}"></span>
</div>
</div> <!-- .specs -->
</div> <!-- .specs-wrapper -->
</div>
<!-- TABLA TIRADAS -->
<table class="prices">
<table class="prices" class="align-items-center">
<thead>
<tr>
<th class="text-center col-tirada" th:text="#{pdf.table.tirada}">TIRADA</th>

View File

@ -1,57 +1,46 @@
<div th:fragment="buttons(appMode, btnClass, showPrev, showNext, showActions, showCart)"
class="buttons-bar mt-2">
<div th:fragment="buttons(appMode, btnClass, showPrev, showNext, showActions, showCart)" class="buttons-bar mt-2">
<!-- Fila 1: ACCIONES, centradas -->
<div class="buttons-row center" th:if="${showActions}">
<button th:if="${appMode == 'add' or appMode == 'edit'}"
type="button"
class="btn btn-secondary d-flex align-items-center mx-2 guardar-presupuesto">
<button th:if="${appMode == 'add' or appMode == 'edit'}" type="button"
class="btn btn-secondary d-flex align-items-center mx-2 guardar-presupuesto">
<i class="ri-save-3-line me-2"></i>
<span th:text="#{presupuesto.guardar}">Guardar</span>
</button>
<button th:if="${appMode == 'add' or appMode == 'edit'}"
type="button"
class="btn btn-secondary d-flex align-items-center mx-2 add-cart-btn">
<i class="ri-shopping-cart-line me-2"></i>
<span th:text="#{presupuesto.add-to-cart}">Añadir a la cesta</span>
</button>
<button type="button"
class="btn btn-secondary d-flex align-items-center mx-2 btn-imprimir">
<button type="button" class="btn btn-secondary d-flex align-items-center mx-2 btn-imprimir">
<i class="ri-printer-line me-2"></i>
<span th:text="#{app.imprimir}">Imprimir</span>
</button>
<!-- Alternativa cuando no está autenticado -->
<button sec:authorize="!isAuthenticated()"
type="button"
class="btn btn-secondary d-flex align-items-center btn-login-required ms-2">
<i class="mdi mdi-login label-icon align-middle fs-16 me-2"></i>
<span th:text="#{presupuesto.resumen.inicie-sesion}">Inicie sesión para continuar</span>
</button>
<button th:if="${appMode == 'add' or appMode == 'edit'}" type="button"
class="btn btn-secondary d-flex align-items-center mx-2 add-cart-btn">
<i class="ri-shopping-cart-line me-2"></i>
<span th:text="#{presupuesto.add-to-cart}">Añadir a la cesta</span>
</button>
<!-- Alternativa cuando no está autenticado -->
<button sec:authorize="!isAuthenticated()" type="button"
class="btn btn-secondary d-flex align-items-center btn-login-required ms-2">
<i class="mdi mdi-login label-icon align-middle fs-16 me-2"></i>
<span th:text="#{presupuesto.resumen.inicie-sesion}">Inicie sesión para continuar</span>
</button>
</div>
<!-- Fila 2: PREV (izq) / NEXT o LOGIN (dcha) -->
<div class="buttons-row split">
<button th:if="${showPrev}"
th:id="|${btnClass}-prev|"
data-btn-action="previous"
th:class="'btn btn-light ' + ${btnClass}"
type="button">
<button th:if="${showPrev}" th:id="|${btnClass}-prev|" data-btn-action="previous"
th:class="'btn btn-light ' + ${btnClass}" type="button">
<i class="ri-arrow-left-circle-line label-icon align-middle fs-16 me-2"></i>
<span th:text="#{app.acciones.anterior}">Anterior</span>
</button>
<div class="right-slot d-flex align-items-center">
<button th:if="${showNext}"
data-btn-action="next"
th:id="|${btnClass}-next|"
th:class="'btn btn-secondary d-flex align-items-center ' + ${btnClass}"
type="button">
<button th:if="${showNext}" data-btn-action="next" th:id="|${btnClass}-next|"
th:class="'btn btn-secondary d-flex align-items-center ' + ${btnClass}" type="button">
<span th:text="#{app.acciones.siguiente}">Siguiente</span>
<i class="ri-arrow-right-circle-line fs-16 ms-2"></i>
</button>
</div>
</div>
</div>
</div>