mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-28 06:38:51 +00:00
vista de pedidos casi terminada (a falta de acciones delos botones, cambio de estados, etc). Trabajando en el presupuesto para modificar las reimpresiones
This commit is contained in:
10053
logs/erp.log
10053
logs/erp.log
File diff suppressed because it is too large
Load Diff
@ -389,6 +389,19 @@ public class skApiClient {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
public Map<String, Object> checkPedidoEstado(Long presupuestoId){
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return Map.of("error", "Internal Server Error: 1"); // Fallback en caso de error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/******************
|
/******************
|
||||||
* PRIVATE METHODS
|
* PRIVATE METHODS
|
||||||
******************/
|
******************/
|
||||||
|
|||||||
@ -13,8 +13,9 @@ public class PedidoLinea {
|
|||||||
aprobado("pedido.estado.aprobado", 1),
|
aprobado("pedido.estado.aprobado", 1),
|
||||||
maquetacion("pedido.estado.maquetacion", 2),
|
maquetacion("pedido.estado.maquetacion", 2),
|
||||||
haciendo_ferro("pedido.estado.haciendo_ferro", 3),
|
haciendo_ferro("pedido.estado.haciendo_ferro", 3),
|
||||||
produccion("pedido.estado.produccion", 4),
|
ferro_cliente("pedido.estado.ferro_cliente", 4),
|
||||||
cancelado("pedido.estado.cancelado", 5);
|
produccion("pedido.estado.produccion", 5),
|
||||||
|
cancelado("pedido.estado.cancelado", 6);
|
||||||
|
|
||||||
private final String messageKey;
|
private final String messageKey;
|
||||||
private final int priority;
|
private final int priority;
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import com.imprimelibros.erp.datatables.DataTablesParser;
|
|||||||
import com.imprimelibros.erp.datatables.DataTablesRequest;
|
import com.imprimelibros.erp.datatables.DataTablesRequest;
|
||||||
import com.imprimelibros.erp.datatables.DataTablesResponse;
|
import com.imprimelibros.erp.datatables.DataTablesResponse;
|
||||||
import com.imprimelibros.erp.paises.PaisesService;
|
import com.imprimelibros.erp.paises.PaisesService;
|
||||||
|
import com.imprimelibros.erp.presupuesto.service.PresupuestoService;
|
||||||
import com.imprimelibros.erp.users.UserDao;
|
import com.imprimelibros.erp.users.UserDao;
|
||||||
|
|
||||||
import jakarta.persistence.criteria.Join;
|
import jakarta.persistence.criteria.Join;
|
||||||
@ -28,11 +29,15 @@ import jakarta.persistence.criteria.JoinType;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/pedidos")
|
@RequestMapping("/pedidos")
|
||||||
public class PedidosController {
|
public class PedidosController {
|
||||||
|
|
||||||
|
private final PresupuestoService presupuestoService;
|
||||||
|
|
||||||
private final PedidoRepository repoPedido;
|
private final PedidoRepository repoPedido;
|
||||||
private final PedidoService pedidoService;
|
private final PedidoService pedidoService;
|
||||||
private final UserDao repoUser;
|
private final UserDao repoUser;
|
||||||
@ -40,14 +45,16 @@ public class PedidosController {
|
|||||||
private final PedidoLineaRepository repoPedidoLinea;
|
private final PedidoLineaRepository repoPedidoLinea;
|
||||||
private final PaisesService paisesService;
|
private final PaisesService paisesService;
|
||||||
|
|
||||||
public PedidosController(PedidoRepository repoPedido, PedidoService pedidoService, UserDao repoUser, MessageSource messageSource,
|
public PedidosController(PedidoRepository repoPedido, PedidoService pedidoService, UserDao repoUser,
|
||||||
PedidoLineaRepository repoPedidoLinea, PaisesService paisesService) {
|
MessageSource messageSource,
|
||||||
|
PedidoLineaRepository repoPedidoLinea, PaisesService paisesService, PresupuestoService presupuestoService) {
|
||||||
this.repoPedido = repoPedido;
|
this.repoPedido = repoPedido;
|
||||||
this.pedidoService = pedidoService;
|
this.pedidoService = pedidoService;
|
||||||
this.repoUser = repoUser;
|
this.repoUser = repoUser;
|
||||||
this.messageSource = messageSource;
|
this.messageSource = messageSource;
|
||||||
this.repoPedidoLinea = repoPedidoLinea;
|
this.repoPedidoLinea = repoPedidoLinea;
|
||||||
this.paisesService = paisesService;
|
this.paisesService = paisesService;
|
||||||
|
this.presupuestoService = presupuestoService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@ -71,8 +78,7 @@ public class PedidosController {
|
|||||||
Long currentUserId = Utils.currentUserId(principal);
|
Long currentUserId = Utils.currentUserId(principal);
|
||||||
|
|
||||||
List<String> searchable = List.of(
|
List<String> searchable = List.of(
|
||||||
"id"
|
"id");
|
||||||
);
|
|
||||||
|
|
||||||
// Campos ordenables
|
// Campos ordenables
|
||||||
List<String> orderable = List.of(
|
List<String> orderable = List.of(
|
||||||
@ -171,8 +177,8 @@ public class PedidosController {
|
|||||||
|
|
||||||
@GetMapping("/view/{id}")
|
@GetMapping("/view/{id}")
|
||||||
public String verPedido(
|
public String verPedido(
|
||||||
@PathVariable(name = "id", required = true) Long id,
|
@PathVariable(name = "id", required = true) Long id,
|
||||||
Model model, Locale locale) {
|
Model model, Locale locale) {
|
||||||
|
|
||||||
Boolean isAdmin = Utils.isCurrentUserAdmin();
|
Boolean isAdmin = Utils.isCurrentUserAdmin();
|
||||||
if (isAdmin) {
|
if (isAdmin) {
|
||||||
@ -182,7 +188,7 @@ public class PedidosController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PedidoDireccion direccionFacturacion = pedidoService.getDireccionFacturacionPedido(id);
|
PedidoDireccion direccionFacturacion = pedidoService.getDireccionFacturacionPedido(id);
|
||||||
if(direccionFacturacion != null){
|
if (direccionFacturacion != null) {
|
||||||
String paisNombre = paisesService.getPaisNombrePorCode3(direccionFacturacion.getPaisCode3(), locale);
|
String paisNombre = paisesService.getPaisNombrePorCode3(direccionFacturacion.getPaisCode3(), locale);
|
||||||
direccionFacturacion.setPaisNombre(paisNombre);
|
direccionFacturacion.setPaisNombre(paisNombre);
|
||||||
}
|
}
|
||||||
@ -192,8 +198,7 @@ public class PedidosController {
|
|||||||
List<Map<String, Object>> lineas = pedidoService.getLineas(id, locale);
|
List<Map<String, Object>> lineas = pedidoService.getLineas(id, locale);
|
||||||
for (Map<String, Object> linea : lineas) {
|
for (Map<String, Object> linea : lineas) {
|
||||||
List<PedidoDireccion> dirEntrega = pedidoService.getDireccionesEntregaPedidoLinea(
|
List<PedidoDireccion> dirEntrega = pedidoService.getDireccionesEntregaPedidoLinea(
|
||||||
((Number) linea.get("lineaId")).longValue()
|
((Number) linea.get("lineaId")).longValue());
|
||||||
);
|
|
||||||
|
|
||||||
if (dirEntrega != null && !dirEntrega.isEmpty()) {
|
if (dirEntrega != null && !dirEntrega.isEmpty()) {
|
||||||
for (PedidoDireccion direccion : dirEntrega) {
|
for (PedidoDireccion direccion : dirEntrega) {
|
||||||
@ -209,4 +214,18 @@ public class PedidosController {
|
|||||||
return "imprimelibros/pedidos/pedidos-view";
|
return "imprimelibros/pedidos/pedidos-view";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------
|
||||||
|
// Acciones sobre las lineas de pedido
|
||||||
|
// -------------------------------------
|
||||||
|
@GetMapping("/linea/{id}/update-status")
|
||||||
|
public String getMethodName(
|
||||||
|
@PathVariable(name = "id", required = true) Long id) {
|
||||||
|
|
||||||
|
PedidoLinea linea = repoPedidoLinea.findById(id).orElse(null);
|
||||||
|
if (linea != null) {
|
||||||
|
Long externalId = linea.getPresupuesto().getProveedorRef2();
|
||||||
|
|
||||||
|
}
|
||||||
|
return new String();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1357,6 +1357,10 @@ public class PresupuestoService {
|
|||||||
return resumen;
|
return resumen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Presupuesto findPresupuestoById(Long id) {
|
||||||
|
return presupuestoRepository.findById(id).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// Métodos privados
|
// Métodos privados
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
|
|||||||
@ -20,6 +20,7 @@ checkout.authorization-required=Certifico que tengo los derechos para imprimir l
|
|||||||
pedido.estado.aprobado=Aprobado
|
pedido.estado.aprobado=Aprobado
|
||||||
pedido.estado.maquetacion=Maquetación
|
pedido.estado.maquetacion=Maquetación
|
||||||
pedido.estado.haciendo_ferro=Haciendo ferro
|
pedido.estado.haciendo_ferro=Haciendo ferro
|
||||||
|
pedido.estado.ferro_cliente=Esperando aprobación de ferro
|
||||||
pedido.estado.produccion=Producción
|
pedido.estado.produccion=Producción
|
||||||
pedido.estado.terminado=Terminado
|
pedido.estado.terminado=Terminado
|
||||||
pedido.estado.cancelado=Cancelado
|
pedido.estado.cancelado=Cancelado
|
||||||
@ -28,6 +29,7 @@ pedido.module-title=Pedidos
|
|||||||
pedido.pedido=Pedido
|
pedido.pedido=Pedido
|
||||||
pedido.fecha-entrega=Fecha de entrega
|
pedido.fecha-entrega=Fecha de entrega
|
||||||
pedido.cancelar=Cancelar pedido
|
pedido.cancelar=Cancelar pedido
|
||||||
|
pedido.update-estado=Actualizar estado
|
||||||
pedido.shipping-addresses=Direcciones de envío
|
pedido.shipping-addresses=Direcciones de envío
|
||||||
pedido.prueba=Prueba
|
pedido.prueba=Prueba
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,8 @@ presupuesto.tabla.region=Región
|
|||||||
presupuesto.tabla.ciudad=Ciudad
|
presupuesto.tabla.ciudad=Ciudad
|
||||||
presupuesto.tabla.acciones=Acciones
|
presupuesto.tabla.acciones=Acciones
|
||||||
|
|
||||||
|
presupuesto.comentario-administrador=Comentarios
|
||||||
|
|
||||||
# Pestaña datos generales de presupuesto
|
# Pestaña datos generales de presupuesto
|
||||||
presupuesto.informacion-libro=Información del libro
|
presupuesto.informacion-libro=Información del libro
|
||||||
presupuesto.datos-generales-descripcion=Datos generales del presupuesto
|
presupuesto.datos-generales-descripcion=Datos generales del presupuesto
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
$(()=>{
|
||||||
|
const csrfToken = document.querySelector('meta[name="_csrf"]')?.getAttribute('content');
|
||||||
|
const csrfHeader = document.querySelector('meta[name="_csrf_header"]')?.getAttribute('content');
|
||||||
|
if (window.$ && csrfToken && csrfHeader) {
|
||||||
|
$.ajaxSetup({
|
||||||
|
beforeSend: function (xhr) {
|
||||||
|
xhr.setRequestHeader(csrfHeader, csrfToken);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const language = document.documentElement.lang || 'es-ES';
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on('click', '.update-status-item', function(){
|
||||||
|
const lineaId = $(this).data('linea-id');
|
||||||
|
if(!lineaId){
|
||||||
|
console.error('No se ha encontrado el ID de la línea del pedido.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Llamada AJAX para actualizar el estado del pedido
|
||||||
|
$.ajax({
|
||||||
|
url: `/imprimelibros/pedidos/linea/${lineaId}/update-status`,
|
||||||
|
type: 'POST',
|
||||||
|
success: function(response) {
|
||||||
|
alert('Estado del pedido actualizado correctamente.');
|
||||||
|
// Aquí puedes agregar lógica adicional, como actualizar la interfaz de usuario
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error('Error al actualizar el estado del pedido:', error);
|
||||||
|
alert('Hubo un error al actualizar el estado del pedido.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
$(() => {
|
||||||
|
var snowEditor = document.querySelectorAll(".snow-editor");
|
||||||
|
if (snowEditor) {
|
||||||
|
Array.from(snowEditor).forEach(function (item) {
|
||||||
|
var snowEditorData = {};
|
||||||
|
var issnowEditorVal = item.classList.contains("snow-editor");
|
||||||
|
if (issnowEditorVal == true) {
|
||||||
|
snowEditorData.theme = 'snow',
|
||||||
|
snowEditorData.modules = {
|
||||||
|
'toolbar': [
|
||||||
|
[{
|
||||||
|
'font': []
|
||||||
|
}, {
|
||||||
|
'size': []
|
||||||
|
}],
|
||||||
|
['bold', 'italic', 'underline', 'strike'],
|
||||||
|
[{
|
||||||
|
'color': []
|
||||||
|
}, {
|
||||||
|
'background': []
|
||||||
|
}],
|
||||||
|
[{
|
||||||
|
'script': 'super'
|
||||||
|
}, {
|
||||||
|
'script': 'sub'
|
||||||
|
}],
|
||||||
|
[{
|
||||||
|
'header': [false, 1, 2, 3, 4, 5, 6]
|
||||||
|
}, 'blockquote', 'code-block'],
|
||||||
|
[{
|
||||||
|
'list': 'ordered'
|
||||||
|
}, {
|
||||||
|
'list': 'bullet'
|
||||||
|
}, {
|
||||||
|
'indent': '-1'
|
||||||
|
}, {
|
||||||
|
'indent': '+1'
|
||||||
|
}],
|
||||||
|
['direction', {
|
||||||
|
'align': []
|
||||||
|
}]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new Quill(item, snowEditorData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -1,39 +1,40 @@
|
|||||||
<div th:fragment="direccionEnvioCard(direccion, pais)" name="direccion"
|
<div th:fragment="direccionEnvioCard(direccion, pais)" name="direccion"
|
||||||
class="card card border mb-3 direccion-card mx-2">
|
class="card card border mb-3 direccion-card mx-2">
|
||||||
<div class="card-body">
|
<div class="card-body position-relative">
|
||||||
|
|
||||||
<div class="row g-3 align-items-start flex-nowrap">
|
<th:block th:if="${direccion.unidades != null}">
|
||||||
<div class="col flex-nowrap">
|
<div class="position-absolute top-0 end-0 mt-2 me-3 text-end">
|
||||||
<span class="fs-14 mb-1 d-block text-break" th:text="${direccion.att}"></span>
|
<div th:if="${direccion.isEjemplarPrueba}">
|
||||||
<span class="text-muted fw-normal text-wrap mb-1 d-block text-break"
|
<span class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
||||||
th:text="${direccion.direccion}"></span>
|
th:text="#{pedido.prueba}"></span>
|
||||||
<span class="text-muted fw-normal text-wrap mb-1 d-block text-break"
|
</div>
|
||||||
th:text="${direccion.cp} + ', ' + ${direccion.ciudad} + ', (' + ${direccion.provincia} + ')'">
|
<div th:if="${!direccion.isEjemplarPrueba}">
|
||||||
</span>
|
<!-- singular -->
|
||||||
<span class="text-muted fw-normal d-block text-break" th:text="${pais}"></span>
|
<span class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
||||||
<span class="text-muted fw-normal d-block text-break"
|
th:if="${direccion.unidades == 1}"
|
||||||
th:text="#{'direcciones.telefono'} + ': ' + ${direccion.telefono}"></span>
|
th:text="|${direccion.unidades} #{cart.shipping.ud}|"></span>
|
||||||
<span class="fw-normal d-block text-break" th:text="${direccion.razonSocial}"></span>
|
|
||||||
<span class="fw-normal d-block text-break" th:text="${direccion.identificacionFiscal}"></span>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto ms-auto text-end">
|
|
||||||
<th:block th:if="${direccion.unidades != null}">
|
|
||||||
<div th:if="${direccion.isEjemplarPrueba}">
|
|
||||||
<span id="units-text" class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
|
||||||
th:text="#{pedido.prueba}"></span>
|
|
||||||
</div>
|
|
||||||
<div th:if="${!direccion.isEjemplarPrueba}">
|
|
||||||
<span id="units-text" class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
|
||||||
th:if="${direccion.unidades == 1}"
|
|
||||||
th:text="|${direccion.unidades} #{cart.shipping.ud}|"></span>
|
|
||||||
|
|
||||||
<!-- plural -->
|
<!-- plural -->
|
||||||
<span id="units-text" class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
<span class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
||||||
th:unless="${direccion.unidades == 1}"
|
th:unless="${direccion.unidades == 1}"
|
||||||
th:text="|${direccion.unidades} #{cart.shipping.uds}|"></span>
|
th:text="|${direccion.unidades} #{cart.shipping.uds}|"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</th:block>
|
||||||
|
|
||||||
|
<!-- TEXTO: usa TODO el ancho -->
|
||||||
|
<span class="fs-14 mb-1 d-block text-break" th:text="${direccion.att}"></span>
|
||||||
|
<span class="text-muted fw-normal text-wrap mb-1 d-block text-break"
|
||||||
|
th:text="${direccion.direccion}"></span>
|
||||||
|
<span class="text-muted fw-normal text-wrap mb-1 d-block text-break"
|
||||||
|
th:text="${direccion.cp} + ', ' + ${direccion.ciudad} + ', (' + ${direccion.provincia} + ')'">
|
||||||
|
</span>
|
||||||
|
<span class="text-muted fw-normal d-block text-break" th:text="${pais}"></span>
|
||||||
|
<span class="text-muted fw-normal d-block text-break"
|
||||||
|
th:text="#{'direcciones.telefono'} + ': ' + ${direccion.telefono}"></span>
|
||||||
|
<span class="fw-normal d-block text-break" th:text="${direccion.razonSocial}"></span>
|
||||||
|
<span class="fw-normal d-block text-break" th:text="${direccion.identificacionFiscal}"></span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -1,12 +1,13 @@
|
|||||||
<div th:fragment="direccionFacturacionCard(direccion, pais)" name="direccionFacturacion"
|
<div th:fragment="direccionFacturacionCard(direccion, pais)" name="direccionFacturacion"
|
||||||
class="card card border mb-3 w-auto direccion-facturacion-card d-inline-block ">
|
class="card card border mb-3 direccion-facturacion-card">
|
||||||
<div class="card-header bg-light">
|
<div class="card-header bg-light">
|
||||||
<span class="fs-16" th:text="#{'direcciones.direccionFacturacion'}"></span>
|
<span class="fs-16" th:text="#{'direcciones.direccionFacturacion'}"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex align-items-start g-3 flex-nowrap w-auto">
|
<div class="d-flex align-items-start g-3 flex-nowrap w-auto">
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<img src="/assets/images/billing_address2.gif" style="width: 100px; height: auto;" alt="Billing Address">
|
<img src="/assets/images/billing_address2.gif" style="width: 100px; height: auto;"
|
||||||
|
alt="Billing Address">
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-nowrap">
|
<div class="flex-nowrap">
|
||||||
<span class="fs-14 mb-1 d-block text-break" th:text="${direccion.att}"></span>
|
<span class="fs-14 mb-1 d-block text-break" th:text="${direccion.att}"></span>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
<div th:fragment="pedido-linea (item, isAdmin)">
|
<div th:fragment="pedido-linea (item, isAdmin)">
|
||||||
|
<input type="hidden" id="lineaId" th:value="${item.lineaId}" />
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<div class="card p-3 mb-0">
|
<div class="card p-3 mb-0">
|
||||||
<div class="row g-3 align-items-start">
|
<div class="row g-3 align-items-start">
|
||||||
@ -79,19 +80,24 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body p-3">
|
<div class="card-body p-3">
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<div class="flex-shrink-0">
|
<div class="col-auto d-none d-md-block">
|
||||||
<img src="/assets/images/delivery-truck.gif" style="width: 120px; height: auto;"
|
<div class="flex-shrink-0">
|
||||||
alt="delivery">
|
<img src="/assets/images/delivery-truck.gif" style="width: 120px; height: auto;"
|
||||||
|
alt="delivery">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="row g-3">
|
||||||
|
<div th:each="direccionEnvio : ${item.direccionesEntrega}" class="mb-3 col-xl-4 col-lg-6 col-md-12 col-sm-12">
|
||||||
|
<div th:insert="~{imprimelibros/direcciones/direccionEnvioCard :: direccionEnvioCard(
|
||||||
|
direccion=${direccionEnvio},
|
||||||
|
pais=${direccionEnvio.paisNombre}
|
||||||
|
)}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div th:each="direccionEnvio : ${item.direccionesEntrega}" class="mb-3">
|
|
||||||
<div th:insert="~{imprimelibros/direcciones/direccionEnvioCard :: direccionEnvioCard(
|
|
||||||
direccion=${direccionEnvio},
|
|
||||||
pais=${direccionEnvio.paisNombre}
|
|
||||||
)}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -99,14 +105,22 @@
|
|||||||
<div class="row align-items-center gy-3">
|
<div class="row align-items-center gy-3">
|
||||||
<div class="col-sm">
|
<div class="col-sm">
|
||||||
<div class="d-flex flex-wrap my-n1">
|
<div class="d-flex flex-wrap my-n1">
|
||||||
<!-- Botón eliminar -->
|
<!-- Botón cancelar -->
|
||||||
<div>
|
<div>
|
||||||
<a href="javascript:void(0);" class="d-block text-body p-1 px-2 delete-item"
|
<a href="javascript:void(0);" class="d-block text-body p-1 px-2 cancel-item"
|
||||||
th:attr="data-cart-item-id=${item.presupuestoId}">
|
th:attr="data-linea-id=${item.lineaId}">
|
||||||
<i class="ri-delete-bin-fill text-muted align-bottom me-1"><span
|
<i class="ri-delete-bin-fill text-muted align-bottom me-1"><span
|
||||||
th:text="#{pedido.cancelar}">Cancelar Pedido</span></i>
|
th:text="#{pedido.cancelar}">Cancelar Pedido</span></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- Actualizar estado-->
|
||||||
|
<div>
|
||||||
|
<a href="javascript:void(0);" class="d-block text-body p-1 px-2 update-status-item"
|
||||||
|
th:attr="data-linea-id=${item.lineaId}">
|
||||||
|
<i class="ri-refresh-line text-muted align-bottom me-1"><span
|
||||||
|
th:text="#{pedido.update-estado}">Cancelar Pedido</span></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -35,10 +35,22 @@
|
|||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<div th:insert="~{imprimelibros/direcciones/direccionFacturacionCard :: direccionFacturacionCard (direccion=${direccionFacturacion}, pais=${direccionFacturacion != null ? direccionFacturacion.paisNombre : ''})}"></div>
|
<div class="row">
|
||||||
|
<div class="col-12 col-md-auto">
|
||||||
|
<div th:insert="~{imprimelibros/direcciones/direccionFacturacionCard ::
|
||||||
|
direccionFacturacionCard(
|
||||||
|
direccion=${direccionFacturacion},
|
||||||
|
pais=${direccionFacturacion != null ? direccionFacturacion.paisNombre : ''}
|
||||||
|
)}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<th:block th:each="linea: ${lineas}">
|
<th:block th:each="linea: ${lineas}">
|
||||||
<div th:insert="~{imprimelibros/pedidos/pedidos-linea :: pedido-linea (item=${linea}, isAdmin=${isAdmin})}"></div>
|
<div
|
||||||
|
th:insert="~{imprimelibros/pedidos/pedidos-linea :: pedido-linea (item=${linea}, isAdmin=${isAdmin})}">
|
||||||
|
</div>
|
||||||
</th:block>
|
</th:block>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -63,8 +75,8 @@
|
|||||||
<script th:src="@{/assets/libs/datatables/buttons.print.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/libs/datatables/buttons.colVis.min.js}"></script>
|
||||||
|
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-common.js}"></script>
|
<script type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-view.js}"></script>
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-admin.js}"></script>
|
<script th:if="${isAdmin}" type="module" th:src="@{/assets/js/pages/imprimelibros/pedidos/pedidos-view-admin.js}"></script>
|
||||||
</th:block>
|
</th:block>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,8 @@
|
|||||||
aria-controls="pills-general-data" aria-selected="true">
|
aria-controls="pills-general-data" aria-selected="true">
|
||||||
<i
|
<i
|
||||||
class="ri-information-line fs-5 p-1 bg-soft-primary text-primary rounded-circle align-middle me-2"></i>
|
class="ri-information-line fs-5 p-1 bg-soft-primary text-primary rounded-circle align-middle me-2"></i>
|
||||||
<label class="fs-13 my-2" th:text="#{presupuesto.datos-generales}">Datos Generales</label>
|
<label class="fs-13 my-2" th:text="#{presupuesto.datos-generales}">Datos
|
||||||
|
Generales</label>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
@ -60,7 +61,8 @@
|
|||||||
aria-controls="pills-seleccion-tirada" aria-selected="false">
|
aria-controls="pills-seleccion-tirada" aria-selected="false">
|
||||||
<i
|
<i
|
||||||
class="ri-add-box-line fs-5 p-1 bg-soft-primary text-primary rounded-circle align-middle me-2"></i>
|
class="ri-add-box-line fs-5 p-1 bg-soft-primary text-primary rounded-circle align-middle me-2"></i>
|
||||||
<label class="fs-13 my-2" th:text="#{presupuesto.seleccion-tirada}">Seleccion de tirada</label>
|
<label class="fs-13 my-2" th:text="#{presupuesto.seleccion-tirada}">Seleccion de
|
||||||
|
tirada</label>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
@ -137,6 +139,31 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- end tab content -->
|
<!-- end tab content -->
|
||||||
|
|
||||||
|
<div sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')">
|
||||||
|
<div class="accordion lefticon-accordion custom-accordionwithicon accordion-border-box mt-3"
|
||||||
|
id="accordionlefticon">
|
||||||
|
<div class="accordion-item material-shadow">
|
||||||
|
<h2 class="accordion-header" id="accordionComentario">
|
||||||
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
|
data-bs-target="#accor_accordionComentario" aria-expanded="false"
|
||||||
|
aria-controls="accor_accordionComentario"
|
||||||
|
th:text="#{presupuesto.comentario-administrador}">Comentario
|
||||||
|
</button>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div id="accor_accordionComentario" class="accordion-collapse collapse"
|
||||||
|
aria-labelledby="accordionComentario" data-bs-parent="#accordionlefticon">
|
||||||
|
<div class="accordion-body">
|
||||||
|
<div class="snow-editor" name="comentario"
|
||||||
|
th:text="@{presupuesto.comentario}" style=" height: 300px;">
|
||||||
|
</div> <!-- end Snow-editor-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<!-- end card body -->
|
<!-- end card body -->
|
||||||
|
|||||||
@ -10,6 +10,8 @@
|
|||||||
</th:block>
|
</th:block>
|
||||||
<th:block layout:fragment="pagecss">
|
<th:block layout:fragment="pagecss">
|
||||||
<link th:href="@{/assets/css/presupuestador.css}" rel="stylesheet" />
|
<link th:href="@{/assets/css/presupuestador.css}" rel="stylesheet" />
|
||||||
|
<link sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')"
|
||||||
|
th:href="@{/assets/libs/quill/quill.snow.css}" rel="stylesheet" type="text/css" />
|
||||||
</th:block>
|
</th:block>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -19,62 +21,75 @@
|
|||||||
<div th:replace="~{imprimelibros/partials/sidebar :: sidebar}"
|
<div th:replace="~{imprimelibros/partials/sidebar :: sidebar}"
|
||||||
sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')">
|
sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')">
|
||||||
|
|
||||||
<th:block layout:fragment="content">
|
<th:block layout:fragment="content">
|
||||||
<div th:if="${#authorization.expression('isAuthenticated()')}">
|
<div th:if="${#authorization.expression('isAuthenticated()')}">
|
||||||
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<nav aria-label="breadcrumb">
|
<nav aria-label="breadcrumb">
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li class="breadcrumb-item"><a href="/"><i class="ri-home-5-fill"></i></a></li>
|
<li class="breadcrumb-item"><a href="/"><i class="ri-home-5-fill"></i></a></li>
|
||||||
<li class="breadcrumb-item"><a href="/presupuesto" th:text="#{presupuesto.title}"></a></li>
|
<li class="breadcrumb-item"><a href="/presupuesto" th:text="#{presupuesto.title}"></a></li>
|
||||||
<li class="breadcrumb-item active" aria-current="page" th:if="${appMode == 'add'}" th:text="#{presupuesto.add}">
|
<li class="breadcrumb-item active" aria-current="page" th:if="${appMode == 'add'}"
|
||||||
|
th:text="#{presupuesto.add}">
|
||||||
Nuevo presupuesto
|
Nuevo presupuesto
|
||||||
</li>
|
</li>
|
||||||
<li class="breadcrumb-item active" aria-current="page" th:text="#{presupuesto.editar.title}" th:if="${appMode == 'edit'}">
|
<li class="breadcrumb-item active" aria-current="page" th:text="#{presupuesto.editar.title}"
|
||||||
|
th:if="${appMode == 'edit'}">
|
||||||
Editar presupuesto
|
Editar presupuesto
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
|
||||||
|
|
||||||
<!-- alert info -->
|
|
||||||
<div th:if="${appMode} == 'view'" class="alert alert-warning fade show" role="alert">
|
|
||||||
<i class="ri-information-fill me-1 align-middle"></i>
|
|
||||||
<span th:text="#{presupuesto.info.presupuestos-anonimos-view}"></span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div th:insert="~{imprimelibros/presupuestos/presupuestador :: presupuestador}"></div>
|
<div class="container-fluid">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</th:block>
|
|
||||||
|
|
||||||
<th:block th:replace="~{theme/partials/vendor-scripts :: scripts}" />
|
<!-- alert info -->
|
||||||
<th:block layout:fragment="pagejs">
|
<div th:if="${appMode} == 'view'" class="alert alert-warning fade show" role="alert">
|
||||||
<script th:inline="javascript">
|
<i class="ri-information-fill me-1 align-middle"></i>
|
||||||
window.languageBundle = /*[[${languageBundle}]]*/ {};
|
<span th:text="#{presupuesto.info.presupuestos-anonimos-view}"></span>
|
||||||
</script>
|
</div>
|
||||||
|
|
||||||
<!-- JS de Buttons y dependencias -->
|
<div th:insert="~{imprimelibros/presupuestos/presupuestador :: presupuestador}"></div>
|
||||||
<div th:if="${appMode} == 'view'">
|
</div>
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-publicos.js}"></script>
|
|
||||||
</div>
|
|
||||||
<div th:if="${appMode} == 'edit'">
|
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-privado.js}"></script>
|
|
||||||
</div>
|
|
||||||
<div th:if="${appMode} == 'add'">
|
|
||||||
<div th:if="${mode} == 'public'">
|
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-publicos-add.js}"></script>
|
|
||||||
</div>
|
</div>
|
||||||
<div th:if="${mode} != 'public'">
|
</th:block>
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-privado.js}"></script>
|
|
||||||
|
<th:block th:replace="~{theme/partials/vendor-scripts :: scripts}" />
|
||||||
|
<th:block layout:fragment="pagejs">
|
||||||
|
<script th:inline="javascript">
|
||||||
|
window.languageBundle = /*[[${languageBundle}]]*/ {};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- JS de Buttons y dependencias -->
|
||||||
|
<div th:if="${appMode} == 'view'">
|
||||||
|
<script type="module"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-publicos.js}"></script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div th:if="${appMode} == 'edit'">
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/presupuesto-maquetacion.js}"></script>
|
<script type="module"
|
||||||
<script type="module" th:src="@{/assets/js/pages/imprimelibros/presupuestador/presupuesto-marcapaginas.js}"></script>
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-privado.js}"></script>
|
||||||
</th:block>
|
</div>
|
||||||
|
<div th:if="${appMode} == 'add'">
|
||||||
|
<div th:if="${mode} == 'public'">
|
||||||
|
<script type="module"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-publicos-add.js}"></script>
|
||||||
|
</div>
|
||||||
|
<div th:if="${mode} != 'public'">
|
||||||
|
<script type="module"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/wizard-privado.js}"></script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="module"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/presupuesto-maquetacion.js}"></script>
|
||||||
|
<script type="module"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/presupuesto-marcapaginas.js}"></script>
|
||||||
|
|
||||||
|
<script sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')"
|
||||||
|
th:src="@{/assets/libs/quill/quill.min.js}"></script>
|
||||||
|
<script sec:authorize="isAuthenticated() and hasAnyRole('SUPERADMIN','ADMIN')"
|
||||||
|
th:src="@{/assets/js/pages/imprimelibros/presupuestador/text-editor.js}"></script>
|
||||||
|
</th:block>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user