mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-24 09:40:21 +00:00
terminando pedidos
This commit is contained in:
10674
logs/erp.log
10674
logs/erp.log
File diff suppressed because it is too large
Load Diff
@ -69,4 +69,18 @@ public class PaisesService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPaisNombrePorCode3(String code3, Locale locale) {
|
||||||
|
if (code3 == null || code3.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
Optional<Paises> opt = repo.findByCode3(code3);
|
||||||
|
if (opt.isPresent()) {
|
||||||
|
Paises pais = opt.get();
|
||||||
|
String key = pais.getKeyword();
|
||||||
|
return messageSource.getMessage("paises." + key, null, key, locale);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.imprimelibros.erp.pedidos;
|
|||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import org.hibernate.annotations.CreationTimestamp;
|
import org.hibernate.annotations.CreationTimestamp;
|
||||||
import com.imprimelibros.erp.direcciones.Direccion.TipoIdentificacionFiscal;
|
import com.imprimelibros.erp.direcciones.Direccion.TipoIdentificacionFiscal;
|
||||||
|
import com.imprimelibros.erp.paises.Paises;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@ -50,6 +51,13 @@ public class PedidoDireccion {
|
|||||||
@Column(name = "pais_code3", nullable = false, length = 3)
|
@Column(name = "pais_code3", nullable = false, length = 3)
|
||||||
private String paisCode3 = "esp";
|
private String paisCode3 = "esp";
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "pais_code3", referencedColumnName = "code3", insertable = false, updatable = false)
|
||||||
|
private Paises pais;
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
private String paisNombre;
|
||||||
|
|
||||||
@Column(name = "telefono", nullable = false, length = 30)
|
@Column(name = "telefono", nullable = false, length = 30)
|
||||||
private String telefono;
|
private String telefono;
|
||||||
|
|
||||||
@ -164,6 +172,14 @@ public class PedidoDireccion {
|
|||||||
this.paisCode3 = paisCode3;
|
this.paisCode3 = paisCode3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Paises getPais() {
|
||||||
|
return pais;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPais(Paises pais) {
|
||||||
|
this.pais = pais;
|
||||||
|
}
|
||||||
|
|
||||||
public String getTelefono() {
|
public String getTelefono() {
|
||||||
return telefono;
|
return telefono;
|
||||||
}
|
}
|
||||||
@ -207,5 +223,12 @@ public class PedidoDireccion {
|
|||||||
public LocalDateTime getCreatedAt() {
|
public LocalDateTime getCreatedAt() {
|
||||||
return createdAt;
|
return createdAt;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public String getPaisNombre() {
|
||||||
|
return paisNombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPaisNombre(String paisNombre) {
|
||||||
|
this.paisNombre = paisNombre;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -11,5 +11,7 @@ public interface PedidoDireccionRepository extends JpaRepository<PedidoDireccion
|
|||||||
|
|
||||||
// Si en tu código sueles trabajar con el objeto:
|
// Si en tu código sueles trabajar con el objeto:
|
||||||
List<PedidoDireccion> findByPedidoLinea(PedidoLinea pedidoLinea);
|
List<PedidoDireccion> findByPedidoLinea(PedidoLinea pedidoLinea);
|
||||||
|
|
||||||
|
PedidoDireccion findByPedidoIdAndFacturacionTrue(Long pedidoId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -152,6 +152,14 @@ public class PedidoService {
|
|||||||
return resultados;
|
return resultados;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PedidoDireccion getDireccionFacturacionPedido(Long pedidoId) {
|
||||||
|
return pedidoDireccionRepository.findByPedidoIdAndFacturacionTrue(pedidoId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PedidoDireccion> getDireccionesEntregaPedidoLinea(Long pedidoLineaId) {
|
||||||
|
return pedidoDireccionRepository.findByPedidoLinea_Id(pedidoLineaId);
|
||||||
|
}
|
||||||
|
|
||||||
/***************************
|
/***************************
|
||||||
* MÉTODOS PRIVADOS
|
* MÉTODOS PRIVADOS
|
||||||
***************************/
|
***************************/
|
||||||
@ -239,9 +247,9 @@ public class PedidoService {
|
|||||||
direccion.setUnidades((Integer) dir.getOrDefault("cantidad", 1));
|
direccion.setUnidades((Integer) dir.getOrDefault("cantidad", 1));
|
||||||
direccion.setEjemplarPrueba(false);
|
direccion.setEjemplarPrueba(false);
|
||||||
}
|
}
|
||||||
|
direccion.setFacturacion(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
direccion.setFacturacion(false);
|
|
||||||
direccion.setAtt((String) dir.getOrDefault("att", ""));
|
direccion.setAtt((String) dir.getOrDefault("att", ""));
|
||||||
direccion.setDireccion((String) dir.getOrDefault("direccion", ""));
|
direccion.setDireccion((String) dir.getOrDefault("direccion", ""));
|
||||||
direccion.setCp((Integer) dir.getOrDefault("cp", 0));
|
direccion.setCp((Integer) dir.getOrDefault("cp", 0));
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import com.imprimelibros.erp.datatables.DataTable;
|
|||||||
import com.imprimelibros.erp.datatables.DataTablesParser;
|
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.users.UserDao;
|
import com.imprimelibros.erp.users.UserDao;
|
||||||
|
|
||||||
import jakarta.persistence.criteria.Join;
|
import jakarta.persistence.criteria.Join;
|
||||||
@ -37,14 +38,16 @@ public class PedidosController {
|
|||||||
private final UserDao repoUser;
|
private final UserDao repoUser;
|
||||||
private final MessageSource messageSource;
|
private final MessageSource messageSource;
|
||||||
private final PedidoLineaRepository repoPedidoLinea;
|
private final PedidoLineaRepository repoPedidoLinea;
|
||||||
|
private final PaisesService paisesService;
|
||||||
|
|
||||||
public PedidosController(PedidoRepository repoPedido, PedidoService pedidoService, UserDao repoUser, MessageSource messageSource,
|
public PedidosController(PedidoRepository repoPedido, PedidoService pedidoService, UserDao repoUser, MessageSource messageSource,
|
||||||
PedidoLineaRepository repoPedidoLinea) {
|
PedidoLineaRepository repoPedidoLinea, PaisesService paisesService) {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@ -177,7 +180,30 @@ public class PedidosController {
|
|||||||
} else {
|
} else {
|
||||||
model.addAttribute("isAdmin", false);
|
model.addAttribute("isAdmin", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PedidoDireccion direccionFacturacion = pedidoService.getDireccionFacturacionPedido(id);
|
||||||
|
if(direccionFacturacion != null){
|
||||||
|
String paisNombre = paisesService.getPaisNombrePorCode3(direccionFacturacion.getPaisCode3(), locale);
|
||||||
|
direccionFacturacion.setPaisNombre(paisNombre);
|
||||||
|
}
|
||||||
|
|
||||||
|
model.addAttribute("direccionFacturacion", direccionFacturacion);
|
||||||
|
|
||||||
List<Map<String, Object>> lineas = pedidoService.getLineas(id, locale);
|
List<Map<String, Object>> lineas = pedidoService.getLineas(id, locale);
|
||||||
|
for (Map<String, Object> linea : lineas) {
|
||||||
|
List<PedidoDireccion> dirEntrega = pedidoService.getDireccionesEntregaPedidoLinea(
|
||||||
|
((Number) linea.get("lineaId")).longValue()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (dirEntrega != null && !dirEntrega.isEmpty()) {
|
||||||
|
for (PedidoDireccion direccion : dirEntrega) {
|
||||||
|
String paisNombre = paisesService.getPaisNombrePorCode3(direccion.getPaisCode3(), locale);
|
||||||
|
direccion.setPaisNombre(paisNombre);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
linea.put("direccionesEntrega", dirEntrega);
|
||||||
|
|
||||||
|
}
|
||||||
model.addAttribute("lineas", lineas);
|
model.addAttribute("lineas", lineas);
|
||||||
model.addAttribute("id", id);
|
model.addAttribute("id", id);
|
||||||
return "imprimelibros/pedidos/pedidos-view";
|
return "imprimelibros/pedidos/pedidos-view";
|
||||||
|
|||||||
@ -35,6 +35,8 @@ direcciones.pasaporte=Pasaporte
|
|||||||
direcciones.cif=C.I.F.
|
direcciones.cif=C.I.F.
|
||||||
direcciones.vat_id=VAT ID
|
direcciones.vat_id=VAT ID
|
||||||
|
|
||||||
|
direcciones.direccionFacturacion=Dirección de facturación
|
||||||
|
|
||||||
direcciones.delete.title=Eliminar dirección
|
direcciones.delete.title=Eliminar dirección
|
||||||
direcciones.delete.button=Si, ELIMINAR
|
direcciones.delete.button=Si, ELIMINAR
|
||||||
direcciones.delete.text=¿Está seguro de que desea eliminar esta dirección?<br>Esta acción no se puede deshacer.
|
direcciones.delete.text=¿Está seguro de que desea eliminar esta dirección?<br>Esta acción no se puede deshacer.
|
||||||
|
|||||||
@ -27,6 +27,9 @@ pedido.estado.cancelado=Cancelado
|
|||||||
pedido.module-title=Pedidos
|
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.shipping-addresses=Direcciones de envío
|
||||||
|
pedido.prueba=Prueba
|
||||||
|
|
||||||
pedido.table.id=Num. Pedido
|
pedido.table.id=Num. Pedido
|
||||||
pedido.table.cliente=Cliente
|
pedido.table.cliente=Cliente
|
||||||
|
|||||||
BIN
src/main/resources/static/assets/images/billin_address.gif
Normal file
BIN
src/main/resources/static/assets/images/billin_address.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 629 KiB |
BIN
src/main/resources/static/assets/images/billing_address2.gif
Normal file
BIN
src/main/resources/static/assets/images/billing_address2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 986 KiB |
BIN
src/main/resources/static/assets/images/billing_address2.gif.gif
Normal file
BIN
src/main/resources/static/assets/images/billing_address2.gif.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 750 KiB |
BIN
src/main/resources/static/assets/images/delivery-truck.gif
Normal file
BIN
src/main/resources/static/assets/images/delivery-truck.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 847 KiB |
@ -0,0 +1,39 @@
|
|||||||
|
<div th:fragment="direccionEnvioCard(direccion, pais)" name="direccion"
|
||||||
|
class="card card border mb-3 direccion-card mx-2">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<div class="row g-3 align-items-start flex-nowrap">
|
||||||
|
<div class="col flex-nowrap">
|
||||||
|
<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 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 -->
|
||||||
|
<span id="units-text" class="mb-2 fw-semibold d-block text-muted text-uppercase"
|
||||||
|
th:unless="${direccion.unidades == 1}"
|
||||||
|
th:text="|${direccion.unidades} #{cart.shipping.uds}|"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
<div th:fragment="direccionFacturacionCard(direccion, pais)" name="direccionFacturacion"
|
||||||
|
class="card card border mb-3 w-auto direccion-facturacion-card d-inline-block ">
|
||||||
|
<div class="card-header bg-light">
|
||||||
|
<span class="fs-16" th:text="#{'direcciones.direccionFacturacion'}"></span>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex align-items-start g-3 flex-nowrap w-auto">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img src="/assets/images/billing_address2.gif" style="width: 100px; height: auto;" alt="Billing Address">
|
||||||
|
</div>
|
||||||
|
<div class="flex-nowrap">
|
||||||
|
<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>
|
||||||
@ -73,6 +73,27 @@
|
|||||||
</th:block>
|
</th:block>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div card class="mt-3">
|
||||||
|
<div class="card-header bg-light p-3">
|
||||||
|
<span class="mb-0 fs-16" th:text="#{pedido.shipping-addresses}">Direcciones de envío</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-body p-3">
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img src="/assets/images/delivery-truck.gif" style="width: 120px; height: auto;"
|
||||||
|
alt="delivery">
|
||||||
|
</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 th:if="${isAdmin}" class="card-footer bg-light p-3">
|
<div th:if="${isAdmin}" class="card-footer bg-light p-3">
|
||||||
<div class="row align-items-center gy-3">
|
<div class="row align-items-center gy-3">
|
||||||
@ -82,7 +103,8 @@
|
|||||||
<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 delete-item"
|
||||||
th:attr="data-cart-item-id=${item.presupuestoId}">
|
th:attr="data-cart-item-id=${item.presupuestoId}">
|
||||||
<i class="ri-delete-bin-fill text-muted align-bottom me-1"></i> Eliminar
|
<i class="ri-delete-bin-fill text-muted align-bottom me-1"><span
|
||||||
|
th:text="#{pedido.cancelar}">Cancelar Pedido</span></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -34,6 +34,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
|
<div th:insert="~{imprimelibros/direcciones/direccionFacturacionCard :: direccionFacturacionCard (direccion=${direccionFacturacion}, pais=${direccionFacturacion != null ? direccionFacturacion.paisNombre : ''})}"></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>
|
||||||
|
|||||||
Reference in New Issue
Block a user