mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-13 08:58:48 +00:00
añadidas las direcciones de pedido
This commit is contained in:
@ -1,14 +1,17 @@
|
||||
package com.imprimelibros.erp.pedidos;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.imprimelibros.erp.direcciones.Direccion;
|
||||
import com.imprimelibros.erp.presupuesto.PresupuestoRepository;
|
||||
import com.imprimelibros.erp.presupuesto.dto.Presupuesto;
|
||||
import com.imprimelibros.erp.direcciones.DireccionService;
|
||||
|
||||
@Service
|
||||
public class PedidoService {
|
||||
@ -16,12 +19,17 @@ public class PedidoService {
|
||||
private final PedidoRepository pedidoRepository;
|
||||
private final PedidoLineaRepository pedidoLineaRepository;
|
||||
private final PresupuestoRepository presupuestoRepository;
|
||||
private final PedidoDireccionRepository pedidoDireccionRepository;
|
||||
private final DireccionService direccionService;
|
||||
|
||||
public PedidoService(PedidoRepository pedidoRepository, PedidoLineaRepository pedidoLineaRepository,
|
||||
PresupuestoRepository presupuestoRepository) {
|
||||
PresupuestoRepository presupuestoRepository, PedidoDireccionRepository pedidoDireccionRepository,
|
||||
DireccionService direccionService) {
|
||||
this.pedidoRepository = pedidoRepository;
|
||||
this.pedidoLineaRepository = pedidoLineaRepository;
|
||||
this.presupuestoRepository = presupuestoRepository;
|
||||
this.pedidoDireccionRepository = pedidoDireccionRepository;
|
||||
this.direccionService = direccionService;
|
||||
}
|
||||
|
||||
public int getDescuentoFidelizacion() {
|
||||
@ -52,7 +60,10 @@ public class PedidoService {
|
||||
* - usuario que crea el pedido
|
||||
*/
|
||||
@Transactional
|
||||
public Pedido crearPedido(List<Long> presupuestoIds,
|
||||
public Pedido crearPedido(
|
||||
List<Long> presupuestoIds,
|
||||
Map<String, Object> presupuestoDirecciones,
|
||||
Long direccionFacturacionId,
|
||||
Map<String, Object> cartSummaryRaw,
|
||||
String proveedor,
|
||||
String proveedorRef,
|
||||
@ -91,11 +102,124 @@ public class PedidoService {
|
||||
linea.setPresupuesto(presupuesto);
|
||||
linea.setCreatedBy(userId);
|
||||
linea.setCreatedAt(LocalDateTime.now());
|
||||
|
||||
linea.setEstado(PedidoLinea.Estado.aprobado);
|
||||
linea.setEstadoManual(false);
|
||||
pedidoLineaRepository.save(linea);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Map<String, Object>> direcciones = (Map<String, Map<String, Object>>) presupuestoDirecciones
|
||||
.get(presupuesto.getId().toString());
|
||||
if (direcciones != null) {
|
||||
saveDireccionesPedidoLinea(direcciones, saved, linea, direccionFacturacionId);
|
||||
}
|
||||
}
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
private void saveDireccionesPedidoLinea(
|
||||
Map<String, Map<String, Object>> direcciones,
|
||||
Pedido pedido,
|
||||
PedidoLinea linea, Long direccionFacturacionId) {
|
||||
// direccion prueba
|
||||
if (direcciones.containsKey("direccionesFP1")) {
|
||||
try {
|
||||
Map<String, Object> fp1 = (Map<String, Object>) direcciones.get("direccionesFP1");
|
||||
@SuppressWarnings("unchecked")
|
||||
PedidoDireccion direccion = saveDireccion(
|
||||
(HashMap<String, Object>) fp1.get("direccion"),
|
||||
pedido,
|
||||
linea, true,
|
||||
false);
|
||||
pedidoDireccionRepository.save(direccion);
|
||||
} catch (Exception e) {
|
||||
// Viene vacio
|
||||
}
|
||||
}
|
||||
if (direcciones.containsKey("direcciones")) {
|
||||
List<?> dirs = (List<?>) direcciones.get("direcciones");
|
||||
for (Object dir : dirs) {
|
||||
@SuppressWarnings("unchecked")
|
||||
HashMap<String, Object> direccionEnvio = (HashMap<String, Object>) ((HashMap<String, Object>) dir)
|
||||
.get("direccion");
|
||||
if (direccionEnvio.get("cantidad") != null && (Integer) direccionEnvio.get("cantidad") == 4
|
||||
&& direccionEnvio.get("att").toString().contains("Depósito Legal")) {
|
||||
continue; // Saltar la dirección de depósito legal
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
PedidoDireccion direccion = saveDireccion(
|
||||
(HashMap<String, Object>) ((HashMap<String, Object>) dir).get("direccion"),
|
||||
pedido,
|
||||
linea, false,
|
||||
false);
|
||||
pedidoDireccionRepository.save(direccion);
|
||||
}
|
||||
}
|
||||
if (direccionFacturacionId != null) {
|
||||
Direccion dirFact = direccionService.findById(direccionFacturacionId).orElse(null);
|
||||
if (dirFact != null) {
|
||||
HashMap<String, Object> dirFactMap = new HashMap<>();
|
||||
dirFactMap.put("att", dirFact.getAtt());
|
||||
dirFactMap.put("direccion", dirFact.getDireccion());
|
||||
dirFactMap.put("cp", dirFact.getCp());
|
||||
dirFactMap.put("municipio", dirFact.getCiudad());
|
||||
dirFactMap.put("provincia", dirFact.getProvincia());
|
||||
dirFactMap.put("pais_code3", dirFact.getPaisCode3());
|
||||
dirFactMap.put("telefono", dirFact.getTelefono());
|
||||
dirFactMap.put("instrucciones", dirFact.getInstrucciones());
|
||||
dirFactMap.put("razon_social", dirFact.getRazonSocial());
|
||||
dirFactMap.put("tipo_identificacion_fiscal", dirFact.getTipoIdentificacionFiscal().name());
|
||||
dirFactMap.put("identificacion_fiscal", dirFact.getIdentificacionFiscal());
|
||||
|
||||
PedidoDireccion direccion = saveDireccion(
|
||||
dirFactMap,
|
||||
pedido,
|
||||
linea, false,
|
||||
true);
|
||||
pedidoDireccionRepository.save(direccion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private PedidoDireccion saveDireccion(HashMap<String, Object> dir, Pedido pedido, PedidoLinea linea,
|
||||
Boolean isEjemplarPrueba,
|
||||
Boolean isFacturacion) {
|
||||
|
||||
PedidoDireccion direccion = new PedidoDireccion();
|
||||
direccion.setPedidoLinea(isFacturacion ? null : linea);
|
||||
if (isFacturacion) {
|
||||
direccion.setUnidades(null);
|
||||
direccion.setFacturacion(true);
|
||||
direccion.setPedido(pedido);
|
||||
|
||||
} else {
|
||||
if (isEjemplarPrueba) {
|
||||
direccion.setUnidades(1);
|
||||
direccion.setEjemplarPrueba(true);
|
||||
} else {
|
||||
direccion.setUnidades((Integer) dir.getOrDefault("cantidad", 1));
|
||||
direccion.setEjemplarPrueba(false);
|
||||
}
|
||||
}
|
||||
|
||||
direccion.setFacturacion(false);
|
||||
direccion.setAtt((String) dir.getOrDefault("att", ""));
|
||||
direccion.setDireccion((String) dir.getOrDefault("direccion", ""));
|
||||
direccion.setCp((Integer) dir.getOrDefault("cp", 0));
|
||||
direccion.setCiudad((String) dir.getOrDefault("municipio", ""));
|
||||
direccion.setProvincia((String) dir.getOrDefault("provincia", ""));
|
||||
direccion.setPaisCode3((String) dir.getOrDefault("pais_code3", "esp"));
|
||||
direccion.setTelefono((String) dir.getOrDefault("telefono", ""));
|
||||
direccion.setInstrucciones((String) dir.getOrDefault("instrucciones", ""));
|
||||
direccion.setRazonSocial((String) dir.getOrDefault("razon_social", ""));
|
||||
direccion.setTipoIdentificacionFiscal(Direccion.TipoIdentificacionFiscal
|
||||
.valueOf((String) dir.getOrDefault("tipo_identificacion_fiscal",
|
||||
Direccion.TipoIdentificacionFiscal.DNI.name())));
|
||||
direccion.setIdentificacionFiscal((String) dir.getOrDefault("identificacion_fiscal", ""));
|
||||
|
||||
return direccion;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user