package com.imprimelibros.erp.pedidos; import jakarta.persistence.*; import org.hibernate.annotations.CreationTimestamp; import com.imprimelibros.erp.direcciones.Direccion.TipoIdentificacionFiscal; import com.imprimelibros.erp.paises.Paises; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @Entity @Table(name = "pedidos_direcciones") public class PedidoDireccion { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // FK a pedidos_lineas.id (nullable, on delete set null) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pedido_linea_id") private PedidoLinea pedidoLinea; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pedido_id") private Pedido pedido; @Column(name = "unidades") private Integer unidades; @Column(name = "is_facturacion", nullable = false) private boolean facturacion = false; @Column(name = "is_ejemplar_prueba", nullable = false) private boolean ejemplarPrueba = false; @Column(name = "email", length = 255) private String email; @Column(name = "att", nullable = false, length = 150) private String att; @Column(name = "direccion", nullable = false, length = 255) private String direccion; @Column(name = "cp", nullable = false) private Integer cp; @Column(name = "ciudad", nullable = false, length = 100) private String ciudad; @Column(name = "provincia", nullable = false, length = 100) private String provincia; @Column(name = "pais_code3", nullable = false, length = 3) 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) private String telefono; @Column(name = "instrucciones", length = 255) private String instrucciones; @Column(name = "razon_social", length = 150) private String razonSocial; @Enumerated(EnumType.STRING) @Column(name = "tipo_identificacion_fiscal", nullable = false, length = 20) private TipoIdentificacionFiscal tipoIdentificacionFiscal = TipoIdentificacionFiscal.DNI; @Column(name = "identificacion_fiscal", length = 50) private String identificacionFiscal; @Column(name = "is_palets", nullable = false) private boolean palets = false; @CreationTimestamp @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; // ===== GETTERS & SETTERS ===== public Long getId() { return id; } public PedidoLinea getPedidoLinea() { return pedidoLinea; } public void setPedidoLinea(PedidoLinea pedidoLinea) { this.pedidoLinea = pedidoLinea; } public Pedido getPedido() { return pedido; } public void setPedido(Pedido pedido) { this.pedido = pedido; } public Integer getUnidades() { return unidades; } public void setUnidades(Integer unidades) { this.unidades = unidades; } public boolean isFacturacion() { return facturacion; } public void setFacturacion(boolean facturacion) { this.facturacion = facturacion; } public boolean isEjemplarPrueba() { return ejemplarPrueba; } public void setEjemplarPrueba(boolean ejemplarPrueba) { this.ejemplarPrueba = ejemplarPrueba; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAtt() { return att; } public void setAtt(String att) { this.att = att; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public Integer getCp() { return cp; } public void setCp(Integer cp) { this.cp = cp; } public String getCiudad() { return ciudad; } public void setCiudad(String ciudad) { this.ciudad = ciudad; } public String getProvincia() { return provincia; } public void setProvincia(String provincia) { this.provincia = provincia; } public String getPaisCode3() { return paisCode3; } public void setPaisCode3(String paisCode3) { this.paisCode3 = paisCode3; } public Paises getPais() { return pais; } public void setPais(Paises pais) { this.pais = pais; } public String getTelefono() { return telefono; } public void setTelefono(String telefono) { this.telefono = telefono; } public String getInstrucciones() { return instrucciones; } public void setInstrucciones(String instrucciones) { this.instrucciones = instrucciones; } public String getRazonSocial() { return razonSocial; } public void setRazonSocial(String razonSocial) { this.razonSocial = razonSocial; } public TipoIdentificacionFiscal getTipoIdentificacionFiscal() { return tipoIdentificacionFiscal; } public void setTipoIdentificacionFiscal(TipoIdentificacionFiscal tipoIdentificacionFiscal) { this.tipoIdentificacionFiscal = tipoIdentificacionFiscal; } public String getIdentificacionFiscal() { return identificacionFiscal; } public void setIdentificacionFiscal(String identificacionFiscal) { this.identificacionFiscal = identificacionFiscal; } public boolean isPalets() { return palets; } public void setPalets(boolean palets) { this.palets = palets; } public LocalDateTime getCreatedAt() { return createdAt; } public String getPaisNombre() { return paisNombre; } public void setPaisNombre(String paisNombre) { this.paisNombre = paisNombre; } public Map toSkMap(Double pesoKg) { Map direccion = new HashMap<>(); direccion.put("cantidad", this.getUnidades()); direccion.put("peso", pesoKg); direccion.put("att", this.getAtt()); direccion.put("email", this.getEmail()); direccion.put("direccion", this.getDireccion()); direccion.put("pais_code3", this.getPaisCode3()); direccion.put("cp", this.getCp()); direccion.put("municipio", this.getCiudad()); direccion.put("provincia", this.getProvincia()); direccion.put("telefono", this.getTelefono()); direccion.put("entregaPieCalle", this.isPalets() ? 1 : 0); direccion.put("is_ferro_prototipo", this.isEjemplarPrueba() ? 1 : 0); direccion.put("num_ferro_prototipo", this.isEjemplarPrueba() ? 1 : 0); Map map = new HashMap<>(); map.put("direccion", direccion); map.put("unidades", this.getUnidades()); map.put("entregaPalets", this.isPalets() ? 1 : 0); return map; } public static Map toSkMapDepositoLegal() { Map direccion = new HashMap<>(); direccion.put("cantidad", 4); direccion.put("peso", 0); direccion.put("att", "Unidades para Depósito Legal (sin envío)"); direccion.put("email", ""); direccion.put("direccion", ""); direccion.put("pais_code3", "esp"); direccion.put("cp", ""); direccion.put("municipio", ""); direccion.put("provincia", ""); direccion.put("telefono", ""); direccion.put("entregaPieCalle", 0); direccion.put("is_ferro_prototipo", 0); direccion.put("num_ferro_prototipo", 0); Map map = new HashMap<>(); map.put("direccion", direccion); map.put("unidades", 4); map.put("entregaPalets", 0); return map; } }