src/AppBundle/Entity/Producto.php line 24
<?php
namespace AppBundle\Entity;
use AppBundle\Entity\Producto\Corte;
use AppBundle\Entity\Producto\Lote;
use AppBundle\Entity\Producto\Presentacion;
use AppBundle\Entity\Producto\Recorte;
use AppBundle\Entity\Producto\TipoBoton;
use AppBundle\Entity\Producto\TipoMVKO;
use AppBundle\Entity\Producto\Variable;
use AppBundle\Entity\Producto\Vinil;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\String\Slugger\AsciiSlugger;
/**
* Producto.
*
* @ORM\Table(name="producto")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProductoRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Producto
{
const CORTE_PRECISION_OBLIGATORIO = 'X';
const CORTE_PRECISION_OPCIONAL = 'O';
const CORTE_PRECISION_NO_APLICA = '';
const TIPO_BOTON_ACCESORIO = 1;
const TIPO_BOTON_BULONERIA = 2;
const TIPO_BOTON_CAÑO = 3;
const TIPO_BOTON_CHAPA = 4;
const TIPO_BOTON_BARRA = 5;
const TIPO_BOTON_BOBINA = 6;
const TIPO_BOTON_MVKO = 7;
const TIPO_BOTON_MVSE = 8;
const ID_BOTON_ESTANDAR = 'STD';
const ID_BOTON_ESTANDAR_DOS = 'ST2';
const ID_BOTON_A_MEDIDA = 'ASM';
const ID_BOTON_RECORTES = 'RCT';
const ID_FAMILIA_BULONERIA = '503';
const ABC = [
'T' => 1,
'A' => 2,
'B' => 3,
'C' => 4,
'X' => 5,
'S' => 6,
'R' => 8,
'Q' => 9
];
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="codigo", type="string", length=50, unique=true)
*/
private $codigo;
/**
* @var string
*
* @ORM\Column(name="nombre_es", type="string", length=300)
*/
private $nombreEs;
/**
* @var string
*
* @ORM\Column(name="nombre_en", type="string", length=300)
*/
private $nombreEn;
/**
* @var string
*
* @ORM\Column(name="precio", type="float")
*/
private $precio;
/**
* @var string
*
* @ORM\Column(name="slug_es", type="string", length=300)
*/
private $slugEs;
/**
* @var string
*
* @ORM\Column(name="slug_en", type="string", length=300)
*/
private $slugEn;
/**
* @var \DateTime
*
* @ORM\Column(name="fecha_creacion", type="datetime")
*/
private $fechaCreacion;
/**
* @var \DateTime
*
* @ORM\Column(name="fecha_actualizacion", type="datetime", options={"default"="CURRENT_TIMESTAMP"}))
*/
private $fechaActualizacion;
/**
* @var string
*
* @ORM\Column(name="fecha_update_solr", type="datetime", nullable=true)
*/
private $fechaUpdateSolr;
/**
* @var bool
*
* @ORM\Column(name="activo", type="boolean")
*/
private $activo;
/**
* @var bool
*
* @ORM\Column(name="eliminado", type="boolean")
*/
private $eliminado = false;
/**
* @ORM\ManyToMany(targetEntity="CaracteristicaValor", inversedBy="productos")
* @ORM\JoinTable(name="producto_caracteristica_valor",
* joinColumns={@ORM\JoinColumn(name="producto_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="caracteristica_valor_id", referencedColumnName="id")}
* )
*/
protected $caracteristicasValor;
/**
* @ORM\ManyToOne(targetEntity="SubFamilia", inversedBy="productos")
* @ORM\JoinColumn(name="sub_familia_id", referencedColumnName="id")
*/
protected $subFamilia;
/**
* @ORM\ManyToOne(targetEntity="Abc")
* @ORM\JoinColumn(name="abc_id", referencedColumnName="id")
*/
protected $abc;
/**
* @ORM\ManyToOne(targetEntity="Abc")
* @ORM\JoinColumn(name="abc_pin_id", referencedColumnName="id")
*/
protected $abcPin;
/**
* @ORM\ManyToOne(targetEntity="GrupoMultimedia", inversedBy="productos")
* @ORM\JoinColumn(name="grupo_multimedia_id", referencedColumnName="id")
*/
protected $grupoMultimedia;
/**
* @var string
*
* @ORM\Column(name="busqueda_es", type="text")
*/
private $busquedaEs;
/**
* @var string
*
* @ORM\Column(name="indicador_abc", type="text")
*/
private $indicadorAbc;
/**
* @var string
*
* @ORM\Column(name="indicador_abc_pin", type="text")
*/
private $indicadorAbcPin;
/**
* @var string
*
* @ORM\Column(name="texto_breve", type="text")
*/
private $textoBreve;
/**
* @var string
*
* @ORM\Column(name="busqueda_en", type="text")
*/
private $busquedaEn;
/**
* @var string
*
* @ORM\Column(name="peso_bruto", type="string", length=8)
*/
private $pesoBruto;
/**
* @var string
*
* @ORM\Column(name="peso_neto", type="string", length=8)
*/
private $pesoNeto;
/**
* @ORM\ManyToOne(targetEntity="UnidadMedida", cascade={"persist"})
* @ORM\JoinColumn(name="unidad_medida_stock", referencedColumnName="id")
*/
protected $unidadMedidaStock;
/**
* @ORM\ManyToOne(targetEntity="UnidadMedida", cascade={"persist"})
* @ORM\JoinColumn(name="unidad_medida_facturacion", referencedColumnName="id")
*/
protected $unidadMedidaFacturacion;
/**
* @var int
*
* @ORM\Column(name="cantidad_pack1", type="integer")
*/
private $cantidadPack1;
/**
* @var int
*
* @ORM\Column(name="cantidad_pack2", type="integer")
*/
private $cantidadPack2;
/**
* @var int
*
* @ORM\Column(name="pack_visualizacion", type="integer")
*/
private $packVisualizacion;
/**
* @var bool
*
* @ORM\Column(name="en_oferta", type="boolean")
*/
private $enOferta;
/**
* @var bool
*
* @ORM\Column(name="en_stock", type="boolean")
*/
private $enStock;
/**
* @var string
*
* @ORM\Column(name="stock_sucursales", type="text", nullable=true)
*/
private $stockEnSucursales;
/**
* @ORM\OneToMany(targetEntity="MaterialUnidadMedida", mappedBy="material", cascade={"persist"}, orphanRemoval=true)
*/
protected $materialesUnidadMedida;
/**
* @var string
*
* @ORM\Column(name="tipo_boton", type="integer")
*/
private $tipoBoton;
/**
* @var bool
*
* @ORM\Column(name="boton_recorte", type="boolean")
*/
private $botonRecorte;
/**
* @var bool
*
* @ORM\Column(name="boton_a_medida", type="boolean")
*/
private $botonAMedida;
/**
* @var string
*
* @ORM\Column(name="minimo_venta_general", type="float")
*/
private $minimoVentaGeneral;
/**
* @var decimal
*
* @ORM\Column(name="valor_minimo_medida", type="decimal", precision=13, scale=3)
*/
private $valorMinimoMedida;
/**
* @var decimal
*
* @ORM\Column(name="valor_maximo_medida", type="decimal", precision=13, scale=3)
*/
private $valorMaximoMedida;
/**
* @var string
*
* @ORM\Column(type="integer")
*/
private $largoStd1;
/**
* @var string
*
* @ORM\Column(type="integer")
*/
private $largoStd2;
protected $itemsCarrito;
/**
* @var string
*
* @ORM\Column(name="prom_ventas", type="float")
*/
protected $promVentas;
/**
* @var string
*
* @ORM\Column(name="prom_ventas_old", type="float")
*/
protected $promVentasOld;
/**
* @var string
*
* @ORM\Column(name="corte_precision", type="string", length=1)
*/
private $cortePrecision;
/**
* @var string
*
* @ORM\Column(name="data_mv", type="text", nullable=true)
*/
private $dataMV;
/**
* @var bool
*
* @ORM\Column(name="es_mvse", type="boolean")
*/
private $esMvse = false;
/**
* @var bool
*
* @ORM\Column(name="inoxsale", type="boolean" , nullable=false, options={"default"=0})
*/
private $inoxsale = false;
/**
* @var bool
*
* @ORM\Column(name="inmovilizado", type="boolean" , nullable=false, options={"default"=0})
*/
private $inmovilizado = false;
/**
* @var bool
*
* @ORM\Column(name="bobina", type="boolean" , nullable=false, options={"default"=0})
*/
private $bobina = false;
/**
* @var bool
*
* @ORM\Column(name="leyendaOpCompra", type="boolean")
*/
private $leyendaOpCompra = false;
/**
* @var bool
*
* @ORM\Column(name="noUruguay", type="boolean", nullable=true, options={"default"=0})
*/
private $noUruguay = false;
/**
* @ORM\ManyToMany(targetEntity="Etiqueta", mappedBy="productos", cascade={"persist"})
*/
private $etiquetas;
/**
* @var string
*
* @ORM\Column(name="grupoDeMaterial", type="string" , nullable=true)
*/
private $grupoDeMaterial = false;
/**
* @var string
*
* @ORM\Column(name="cliente", type="string" , nullable=true)
*/
private $cliente = false;
/**
* @var array|null
*/
private array|null $precios = null;
/**
* @var array|null
*/
private array|null $recortes = null;
/**
* @var array|null
*/
private array|null $viniles = null;
/**
* @var array
*/
private array $lotes = [
//
];
/**
* @var array|null
*/
private array|null $bobinas = null;
/**
* Constructor.
*/
public function __construct()
{
$this->fechaCreacion = new \DateTime();
$this->caracteristicasValor = new ArrayCollection();
$this->materialesUnidadMedida = new ArrayCollection();
$this->etiquetas = new ArrayCollection();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Get id.
*
* @return int
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Set nombreEs.
*
* @param string $nombreEs
*
* @return Producto
*/
public function setNombreEs($nombreEs)
{
$this->nombreEs = $nombreEs;
return $this;
}
/**
* Get nombreEs.
*
* @return string
*/
public function getNombreEs()
{
return $this->nombreEs;
}
/**
* Set nombreEn.
*
* @param string $nombreEn
*
* @return Producto
*/
public function setNombreEn($nombreEn)
{
$this->nombreEn = $nombreEn;
return $this;
}
/**
* Get nombreEn.
*
* @return string
*/
public function getNombreEn()
{
return $this->nombreEn;
}
/**
* Set fechaCreacion.
*
* @param \DateTime $fechaCreacion
*
* @return Producto
*/
public function setFechaCreacion($fechaCreacion)
{
$this->fechaCreacion = $fechaCreacion;
return $this;
}
/**
* Get fechaCreacion.
*
* @return \DateTime
*/
public function getFechaCreacion()
{
return $this->fechaCreacion;
}
/**
* Set fechaActualizacion.
*
* @param \DateTime $fechaActualizacion
*
* @return Producto
*/
public function setFechaActualizacion($fechaActualizacion)
{
$this->fechaActualizacion = $fechaActualizacion;
return $this;
}
/**
* Get fechaActualizacion.
*
* @return \DateTime
*/
public function getFechaActualizacion()
{
return $this->fechaActualizacion;
}
/**
* Set fechaActualizacion.
*
* @param \DateTime $fechaUpdateSolr
*
* @return Producto
*/
public function setFechaUpdateSolr($fechaUpdateSolr)
{
$this->fechaUpdateSolr = $fechaUpdateSolr;
return $this;
}
/**
* Get fechaUpdateSolr.
*
* @return \DateTime
*/
public function getFechaUpdateSolr()
{
return $this->fechaUpdateSolr;
}
/**
* Set activo.
*
* @param bool $activo
*
* @return Producto
*/
public function setActivo($activo)
{
$this->activo = $activo;
return $this;
}
/**
* Get activo.
*
* @return bool
*/
public function getActivo()
{
return $this->activo;
}
/**
* Set codigo.
*
* @param string $codigo
*
* @return Producto
*/
public function setCodigo($codigo)
{
$this->codigo = $codigo;
return $this;
}
/**
* Get codigo.
*
* @return string
*/
public function getCodigo()
{
return $this->codigo;
}
/**
* Set subFamilia.
*
* @param \AppBundle\Entity\SubFamilia $subFamilia
*
* @return Producto
*/
public function setSubFamilia(\AppBundle\Entity\SubFamilia $subFamilia = null)
{
$this->subFamilia = $subFamilia;
return $this;
}
/**
* Get subFamilia.
*
* @return \AppBundle\Entity\SubFamilia
*/
public function getSubFamilia()
{
return $this->subFamilia;
}
/**
* Add caracteristicasValor.
*
* @param \AppBundle\Entity\CaracteristicaValor $caracteristicasValor
*
* @return Producto
*/
public function addCaracteristicaValor(\AppBundle\Entity\CaracteristicaValor $caracteristicaValor)
{
if ($this->caracteristicasValor->contains($caracteristicaValor)) {
return;
}
$caracteristicaValor->addProducto($this);
$this->caracteristicasValor[] = $caracteristicaValor;
return $this;
}
/**
* Remove caracteristicasValor.
*
* @param \AppBundle\Entity\CaracteristicaValor $caracteristicaValor
*/
public function removeCaracteristicaValor(\AppBundle\Entity\CaracteristicaValor $caracteristicaValor)
{
$caracteristicaValor->removeProducto($this);
$this->caracteristicasValor->removeElement($caracteristicaValor);
}
/**
* Remove caracteristicasValor.
*
* @param \AppBundle\Entity\CaracteristicaValor $caracteristicaValor
*/
public function removerRelacionCaracteristicaValor($idCaracteristica)
{
foreach ($this->caracteristicasValor as $caracteristicaValor) {
if($caracteristicaValor->getCaracteristica()->getId() == $idCaracteristica){
$this->caracteristicasValor->removeElement($caracteristicaValor);
}
}
}
/**
* Remove caracteristicasValor.
*/
public function removeCaracteristicasValor()
{
foreach ($this->caracteristicasValor as $caracteristicaValor) {
$this->caracteristicasValor->removeElement($caracteristicaValor);
}
}
/**
* Get caracteristicasValor.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCaracteristicasValor()
{
return $this->caracteristicasValor;
}
/**
* Add materialUnidadMedida.
*
* @param \AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida
*
* @return Producto
*/
public function addMaterialUnidadMedida(\AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida)
{
$this->materialesUnidadMedida[] = $materialUnidadMedida;
return $this;
}
/**
* Remove materialUnidadMedida.
*
* @param \AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida
*/
public function removeMaterialUnidadMedida(MaterialUnidadMedida $materialUnidadMedida)
{
$this->materialesUnidadMedida->removeElement($materialUnidadMedida);
}
/**
* Get materialesUnidadMedida.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMaterialesUnidadMedida()
{
return $this->materialesUnidadMedida;
}
/**
* Set precio.
*
* @param int $precio
*
* @return Producto
*/
public function setPrecio($precio)
{
$this->precio = $precio;
return $this;
}
/**
* Get precio.
*
* @return int
*/
public function getPrecio()
{
return $this->precio;
}
/**
* Set slugEs.
*
* @ORM\PreUpdate
* @ORM\PrePersist
*
* @param string $slugEs
*
* @return Producto
*/
public function setSlugEs()
{
$slugify = new AsciiSlugger();
$this->slugEs = $slugify->slug($this->nombreEs)->lower();
return $this;
}
/**
* Get slugEs.
*
* @return string
*/
public function getSlugEs()
{
return $this->slugEs;
}
/**
* Set slugEn.
*
* @ORM\PreUpdate
* @ORM\PrePersist
*
* @param string $slugEn
*
* @return Producto
*/
public function setSlugEn()
{
$slugify = new AsciiSlugger();
$this->slugEn = $slugify->slug($this->nombreEn)->lower();
return $this;
}
/**
* Get slugEn.
*
* @return string
*/
public function getSlugEn()
{
return $this->slugEn;
}
/**
* Set busquedaEs.
*
* @param string $busquedaEs
*
* @return Producto
*/
public function setBusquedaEs($busquedaEs)
{
$this->busquedaEs = $busquedaEs;
return $this;
}
/**
* Get busquedaEs.
*
* @return string
*/
public function getBusquedaEs()
{
return $this->busquedaEs;
}
/**
* Set busquedaEn.
*
* @param string $busquedaEn
*
* @return Producto
*/
public function setBusquedaEn($busquedaEn)
{
$this->busquedaEn = $busquedaEn;
return $this;
}
/**
* Get busquedaEn.
*
* @return string
*/
public function getBusquedaEn()
{
return $this->busquedaEn;
}
/**
* Set pesoNeto.
*
* @param string $pesoNeto
*
* @return Producto
*/
public function setPesoNeto($pesoNeto)
{
$this->pesoNeto = $pesoNeto;
return $this;
}
/**
* Get pesoNeto.
*
* @return string
*/
public function getPesoNeto()
{
return $this->pesoNeto;
}
/**
* Set peroBruto.
*
* @param string $pesoBruto
*
* @return Producto
*/
public function setPesoBruto($pesoBruto)
{
$this->pesoBruto = $pesoBruto;
return $this;
}
/**
* Get pesoBruto.
*
* @return string
*/
public function getPesoBruto()
{
return $this->pesoBruto;
}
/**
* Set unidadmedidaStock.
*
* @param decimal $unidadmedidaStock
*
* @return Producto
*/
public function setUnidadMedidaStock($unidadMedidaStock)
{
$this->unidadMedidaStock = $unidadMedidaStock;
return $this;
}
/**
* Get unidadMedidaStock.
*
* @return decimal
*/
public function getUnidadMedidaStock()
{
return $this->unidadMedidaStock;
}
/**
* Set unidadmedidaFacturacion.
*
* @param decimal $unidadmedidaFacturacion
*
* @return Producto
*/
public function setUnidadMedidaFacturacion($unidadMedidaFacturacion)
{
$this->unidadMedidaFacturacion = $unidadMedidaFacturacion;
return $this;
}
/**
* Get unidadmedidaFacturacion.
*
* @return decimal
*/
public function getUnidadMedidaFacturacion()
{
return $this->unidadMedidaFacturacion;
}
/**
* Set cantidadPack1.
*
* @param int $cantidadPack1
*
* @return Producto
*/
public function setCantidadPack1($cantidadPack1)
{
$this->cantidadPack1 = $cantidadPack1;
return $this;
}
/**
* Get cantidadPack1.
*
* @return int
*/
public function getCantidadPack1()
{
return $this->cantidadPack1;
}
/**
* Set cantidadPack2.
*
* @param int $cantidadPack2
*
* @return Producto
*/
public function setCantidadPack2($cantidadPack2)
{
$this->cantidadPack2 = $cantidadPack2;
return $this;
}
/**
* Get cantidadPack2.
*
* @return int
*/
public function getCantidadPack2()
{
return $this->cantidadPack2;
}
/**
* Set packVisualizacion.
*
* @param int $packVisualizacion
*
* @return Producto
*/
public function setPackVisualizacion($packVisualizacion)
{
$this->packVisualizacion = $packVisualizacion;
return $this;
}
/**
* Get packVisualizacion.
*
* @return int
*/
public function getPackVisualizacion()
{
return $this->packVisualizacion;
}
/**
* Set enOferta.
*
* @param bool $enOferta
*
* @return Producto
*/
public function setEnOferta($enOferta)
{
$this->enOferta = $enOferta;
return $this;
}
/**
* Get enOferta.
*
* @return bool
*/
public function getEnOferta()
{
return $this->enOferta;
}
/**
* Set enStock.
*
* @param bool $enStock
*
* @return Producto
*/
public function setEnStock($enStock)
{
$this->enStock = $enStock;
return $this;
}
/**
* Get enStock.
*
* @return bool
*/
public function getEnStock()
{
return $this->enStock;
}
/**
* Set tipoBoton.
*
* @param string $tipoBoton
*
* @return Producto
*/
public function setTipoBoton($tipoBoton)
{
$this->tipoBoton = $tipoBoton;
return $this;
}
/**
* Get tipoBoton.
*
* @return string
*/
public function getTipoBoton()
{
return $this->tipoBoton;
}
/**
* * Devuelve el TipoBoton.
* @return TipoBoton
*/
public function getTipoBotonEntity(): TipoBoton
{
return TipoBoton::get($this->getTipoBoton());
}
/**
* Set botonRecorte.
*
* @param string $botonRecorte
*
* @return Producto
*/
public function setBotonRecorte($botonRecorte)
{
$this->botonRecorte = $botonRecorte;
return $this;
}
/**
* Get botonRecorte.
*
* @return string
*/
public function getBotonRecorte()
{
return $this->botonRecorte;
}
/**
* Set botonAMedida.
*
* @param string $botonAMedida
*
* @return Producto
*/
public function setBotonAMedida($botonAMedida)
{
$this->botonAMedida = $botonAMedida;
return $this;
}
/**
* Get botonAMedida.
*
* @return string
*/
public function getBotonAMedida()
{
return $this->botonAMedida;
}
/**
* Set valorMinimoMedida.
*
* @param decimal $valorMinimoMediad
*
* @return Producto
*/
public function setValorMinimoMedida($valorMinimoMedida)
{
$this->valorMinimoMedida = $valorMinimoMedida;
return $this;
}
/**
* Get valorMinimoMedida.
*
* @return decimal
*/
public function getValorMinimoMedida()
{
return $this->valorMinimoMedida;
}
/**
* Set valorMaximoMedida.
*
* @param decimal $valorMaximoMedida
*
* @return Producto
*/
public function setValorMaximoMedida($valorMaximoMedida)
{
$this->valorMaximoMedida = $valorMaximoMedida;
return $this;
}
/**
* Get valorMaximoMedida.
*
* @return decimal
*/
public function getValorMaximoMedida()
{
return $this->valorMaximoMedida;
}
/**
* Set eliminado.
*
* @param bool $eliminado
*
* @return Producto
*/
public function setEliminado($eliminado)
{
$this->eliminado = $eliminado;
return $this;
}
/**
* Get eliminado.
*
* @return bool
*/
public function getEliminado()
{
return $this->eliminado;
}
/**
* Set largoStd1.
*
* @param string $largoStd1
*
* @return Producto
*/
public function setLargoStd1($largoStd1)
{
$this->largoStd1 = $largoStd1;
return $this;
}
/**
* Get largoStd1.
*
* @return string
*/
public function getLargoStd1()
{
return $this->largoStd1;
}
/**
* Set largoStd2.
*
* @param string $largoStd2
*
* @return Producto
*/
public function setLargoStd2($largoStd2)
{
$this->largoStd2 = $largoStd2;
return $this;
}
/**
* Get largoStd2.
*
* @return string
*/
public function getLargoStd2()
{
return $this->largoStd2;
}
public function getEsMvse()
{
return $this->esMvse;
}
public function setEsMvse($esMvse)
{
$this->esMvse = $esMvse;
return $this;
}
/*
Esta función es utilizado para la migración a solr,
por alguna razón si se envÃa el valor false no carga el campo en solr
por eso enviamos el valor entero y solr lo interpreta como bool
*/
public function getInoxsale()
{
return intval($this->inoxsale);
}
public function isInoxsale()
{
return $this->inoxsale == true;
}
public function setInoxsale($inoxsale)
{
$this->inoxsale = $inoxsale;
return $this;
}
public function getInmovilizado()
{
return intval($this->inmovilizado);
}
public function isInmovilizado()
{
return $this->inmovilizado;
}
public function setInmovilizado(bool $inmovilizado)
{
$this->inmovilizado = $inmovilizado;
return $this;
}
public function getBobina()
{
return intval($this->bobina);
}
public function isBobina()
{
return $this->bobina == true;
}
public function setBobina($Bobina)
{
$this->bobina = $Bobina;
return $this;
}
public function getLeyendaOpCompra()
{
return $this->leyendaOpCompra;
}
public function setLeyendaOpCompra($leyendaOpCompra)
{
$this->leyendaOpCompra = $leyendaOpCompra;
return $this;
}
public function getNoUruguay()
{
return $this->noUruguay;
}
public function setNoUruguay($noUruguay)
{
$this->noUruguay = $noUruguay;
return $this;
}
/**
* Add caracteristicasValor.
*
* @param \AppBundle\Entity\CaracteristicaValor $caracteristicasValor
*
* @return Producto
*/
public function addCaracteristicasValor(\AppBundle\Entity\CaracteristicaValor $caracteristicasValor)
{
$this->caracteristicasValor[] = $caracteristicasValor;
return $this;
}
/**
* Add materialesUnidadMedida.
*
* @param \AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida
*
* @return Producto
*/
public function addMaterialesUnidadMedida(MaterialUnidadMedida $materialesUnidadMedida)
{
$this->materialesUnidadMedida[] = $materialesUnidadMedida;
return $this;
}
/**
* Remove materialesUnidadMedida.
*
* @param \AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida
*/
public function removeMaterialesUnidadMedida(\AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida)
{
$this->materialesUnidadMedida->removeElement($materialesUnidadMedida);
}
public function getPesoFacturacion()
{
foreach ($this->materialesUnidadMedida as $key => $materialUnidadMedida) {
if ($materialUnidadMedida->getUnidadMedidaBase() === $this->unidadMedidaStock->getId() && $materialUnidadMedida->getUnidadMedidaDestino() === $this->unidadMedidaFacturacion->getId()) {
if ($this->tipoBoton == '5') {
$cantBase = $this->largoStd1;
} else {
$cantBase = 1;
}
return $materialUnidadMedida->calcularDestino($cantBase);
}
}
return '';
}
public function pesoAMetros($peso)
{
foreach ($this->materialesUnidadMedida as $key => $materialUnidadMedida) {
if ($materialUnidadMedida->getUnidadMedidaBase() === $this->unidadMedidaStock->getId() && $materialUnidadMedida->getUnidadMedidaDestino() === $this->unidadMedidaFacturacion->getId()) {
return $materialUnidadMedida->calcularBase($peso);
}
}
return 0;
}
/**
* Get caracteristicasValor.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCaracteristicasValorEnOrden()
{
$caracteristicas = [];
foreach ($this->caracteristicasValor as $key => $caracteristicaValor) {
if ($caracteristicaValor->getSlugEs() === 'no-aplica' || !$caracteristicaValor->getCaracteristica()->getFiltrableDesdeListado()) {
continue;
}
$orden = $caracteristicaValor->getCaracteristica()->getOrden();
$caracteristicas[$orden] = [
'nombre' => $caracteristicaValor->getCaracteristica()->getNombreEs(),
'valor' => $caracteristicaValor->getValorEs(),
];
}
ksort($caracteristicas);
$cantCaracteristicas = count($caracteristicas);
if ($this->tipoBoton == 4 or $this->tipoBoton == 5) {
$caracteristicas[$cantCaracteristicas+1] = [
'nombre' => 'Peso Neto',
'valor' => $this->pesoNeto,
];
$caracteristicas[$cantCaracteristicas+2] = [
'nombre' => 'Peso Bruto',
'valor' => $this->pesoBruto,
];
}
return $caracteristicas;
}
/**
* Set promVentas.
*
* @param float $promVentas
*
* @return Producto
*/
public function setPromVentas($promVentas)
{
$this->promVentas = $promVentas;
return $this;
}
/**
* Get promVentas.
*
* @return float
*/
public function getPromVentas()
{
return $this->promVentas;
}
/**
* Set promVentas.
*
* @param float $promVentasOld
*
* @return Producto
*/
public function setPromVentasOld($promVentasOld)
{
$this->promVentasOld = $promVentasOld;
return $this;
}
/**
* Get promVentasOld.
*
* @return float
*/
public function getPromVentasOld()
{
return $this->promVentasOld;
}
/**
* Set minimoVentaGeneral.
*
* @param float $minimoVentaGeneral
*
* @return Producto
*/
public function setMinimoVentaGeneral($minimoVentaGeneral)
{
$this->minimoVentaGeneral = $minimoVentaGeneral;
return $this;
}
/**
* Get minimoVentaGeneral.
*
* @return float
*/
public function getMinimoVentaGeneral()
{
return $this->minimoVentaGeneral;
}
/**
* Set setCortePrecision.
*
* @param string $setCortePrecision
*
* @return Producto
*/
public function setCortePrecision($cortePrecision)
{
$this->cortePrecision = $cortePrecision;
return $this;
}
/**
* Get CortePrecision.
*
* @return bool
*/
public function getCortePrecision()
{
return $this->cortePrecision;
}
/**
* Set dataMV.
*
* @param string $dataMV
*
* @return Producto
*/
public function setDataMV($dataMV)
{
$this->dataMV = $dataMV;
return $this;
}
/**
* Get dataMV.
*
* @return array
*/
public function getDataMV()
{
$dataMV = !empty($this->dataMV) ? json_decode($this->dataMV, true, 512, JSON_BIGINT_AS_STRING) : null;
if (is_array($dataMV)) {
return $dataMV;
}
return;
}
/**
* Add itemsCarrito.
*
* @param \AppBundle\Entity\ItemCarrito $itemsCarrito
*
* @return Producto
*/
public function addItemsCarrito(\AppBundle\Entity\ItemCarrito $itemsCarrito)
{
$this->itemsCarrito[] = $itemsCarrito;
return $this;
}
/**
* Remove itemsCarrito.
*
* @param \AppBundle\Entity\ItemCarrito $itemsCarrito
*/
public function removeItemsCarrito(\AppBundle\Entity\ItemCarrito $itemsCarrito)
{
$this->itemsCarrito->removeElement($itemsCarrito);
}
/**
* Get itemsCarrito.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getItemsCarrito()
{
return $this->itemsCarrito;
}
/**
* Determina si un producto es activable. El mismo debe estar en catálogo y no ser de tipo bobina
* para ser un producto activo.
*
* @return boolean
*/
public function isActivable($tipoBoton, $estaCatalogo) {
if ($tipoBoton !== self::TIPO_BOTON_BOBINA && $estaCatalogo) {
return true;
}
return false;
}
public function getUrlDetalle()
{
return '/producto/' . $this->getId() . '-' . $this->getSlugEs();
}
public function getMetaDescription()
{
$metaDesc = substr($this->getSubfamilia()->getTextoExtEs(), 0, 200);
if (($length = strlen($this->getBusquedaEs())) > 100) {
$keywords = substr($this->getBusquedaEs(), $length - 99, $length);
} else {
$keywords = $this->getBusquedaEs();
}
return $metaDesc . ' ' . strtolower($keywords);
}
/**
* get StockEnSucursales.
*
* @return string
*/
public function getStockEnSucursales(){
return $this->stockEnSucursales;
}
/**
* Set stockEnSucursales.
*
* @param string $stockEnSucursales
*
* @return Producto
*/
public function setStockEnSucursales($stockEnSucursales){
$this->stockEnSucursales = $stockEnSucursales;
return $this;
}
public function estaSincronizado(){
return $this->fechaActualizacion > $this->fechaUpdateSolr;
}
/**
* Set grupoMultimedia
*
* @param \AppBundle\Entity\GrupoMultimedia $grupoMultimedia
*
* @return Producto
*/
public function setGrupoMultimedia(\AppBundle\Entity\GrupoMultimedia $grupoMultimedia = null)
{
$this->grupoMultimedia = $grupoMultimedia;
return $this;
}
/**
* Get grupoMultimedia
*
* @return \AppBundle\Entity\GrupoMultimedia
*/
public function getGrupoMultimedia()
{
return $this->grupoMultimedia;
}
/**
* Retorna un array con las imagenes de la entidad padre
*
* @return array
*/
public function getImagenes()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && count($grupoMulti->getImagenes())) {
return $grupoMulti->getImagenes();
}
$subFamilia = $this->getSubFamilia();
if ($subFamilia && count($subFamilia->getImagenes())) {
return $subFamilia->getImagenes();
}
return [];
}
/**
* * Devuelve un array con las imagenes de la Entidad.
* @return array
*/
public function getImagenesConExtension(): array
{
$imagenes = $this->getImagenes();
if (empty($imagenes)) {
return $imagenes;
}
$collection = [
//
];
foreach ($imagenes as $image) {
$collection[] = pathinfo($image, PATHINFO_FILENAME) . '.' . strtolower(pathinfo($image, PATHINFO_EXTENSION));
}
return $collection;
}
public function getImagenPrincipal()
{
$imagenes = $this->getImagenes();
if (count($imagenes)) {
return $imagenes[0];
}
return '';
}
/**
* Retorna la entidad padre del material
*
* @return GrupoMultimedia|SubFamilia|null
*/
public function getParent()
{
if ($grupoMulti = $this->getGrupoMultimedia()) {
return $grupoMulti;
}
if ($subFamilia = $this->getSubFamilia()) {
return $subFamilia;
}
return null;
}
/**
* Retorna un string con el nombre del archivo
*
* @return string|null
*/
public function getFicha()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && $grupoMulti->getFicha() !== '') {
return $grupoMulti->getFicha();
}
$subFamilia = $this->getSubFamilia();
return ($subFamilia && !empty($subFamilia->getFicha())) ?
$subFamilia->getFicha() : null;
}
/**
* Retorna un string con el id de video
*
* @return string|null
*/
public function getVideo()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && $grupoMulti->getVideo() !== '') {
return $grupoMulti->getVideo();
}
$subFamilia = $this->getSubFamilia();
return ($subFamilia && !empty($subFamilia->getVideo())) ?
$subFamilia->getVideo() : null;
}
/**
* Retorna un string con el nombre del archivo
*
* @return string|null
*/
public function getPlano()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && $grupoMulti->getPlano() !== '') {
return $grupoMulti->getPlano();
}
$subFamilia = $this->getSubFamilia();
return ($subFamilia && !empty($subFamilia->getPlano())) ?
$subFamilia->getPlano() : null;
}
/**
* Retorna un string con el nombre del archivo
*
* @return string|null
*/
public function getFolleto()
{
if(!empty($this->getSubFamilia()->getFamilia()->getCategorias()[0]))
{
$categoria = $this->getSubFamilia()->getFamilia()->getCategorias()[0];
return $categoria->getFolleto();
}
return null;
}
public function getTextoExtEs()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && $grupoMulti->getTextoExtEs() !== '') {
return $grupoMulti->getTextoExtEs();
}
$subFamilia = $this->getSubFamilia();
return ($subFamilia && !empty($subFamilia->getTextoExtEs())) ?
$subFamilia->getTextoExtEs() : '';
}
public function getParentNombreEs()
{
$grupoMulti = $this->getGrupoMultimedia();
if ($grupoMulti && $grupoMulti->getNombreEs() !== '') {
return $grupoMulti->getNombreEs();
}
$subFamilia = $this->getSubFamilia();
return ($subFamilia && !empty($subFamilia->getNombreEs())) ?
$subFamilia->getNombreEs() : '';
}
public function getValorDeCaracteristica($slugCaracteristica){
foreach ($this->caracteristicasValor as $key => $value) {
if($value->getCaracteristica()->getSlugEs() == $slugCaracteristica){
return $value->getValorEs();
}
}
return false;
}
public function getValorDeCaracteristicaSlug($slugCaracteristica){
foreach ($this->caracteristicasValor as $key => $value) {
if($value->getCaracteristica()->getSlugEs() == $slugCaracteristica){
return $value->getSlugEs();
}
}
return false;
}
/**
* Get the value of abc
*/
public function getAbc()
{
return $this->abc;
}
/**
* Set the value of abc
*
* @return self
*/
public function setAbc($abc)
{
$this->abc = $abc;
return $this;
}
/**
* Get the value of abcPin
*/
public function getAbcPin()
{
return $this->abcPin;
}
/**
* Set the value of abcPin
*
* @return self
*/
public function setAbcPin($abcPin)
{
$this->abcPin = $abcPin;
return $this;
}
/**
* Get the value of textoBreve
*/
public function getTextoBreve()
{
return $this->textoBreve;
}
/**
* Set the value of textoBreve
*
* @return self
*/
public function setTextoBreve($textoBreve)
{
$this->textoBreve = $textoBreve;
return $this;
}
/**
* Get the value of indicadorAbc
*/
public function getIndicadorAbc()
{
return $this->indicadorAbc;
}
/**
* Set the value of indicadorAbc
*
* @return self
*/
public function setIndicadorAbc($indicadorAbc)
{
$this->indicadorAbc = $indicadorAbc;
if(in_array($indicadorAbc,self::ABC))
{
$this->abc = self::ABC[$indicadorAbc];
}
return $this;
}
/**
* Get the value of indicadorAbcPin
*/
public function getIndicadorAbcPin()
{
return $this->indicadorAbcPin;
}
/**
* Set the value of indicadorAbcPin
*
* @return self
*/
public function setIndicadorAbcPin($indicadorAbcPin)
{
$this->indicadorAbcPin = $indicadorAbcPin;
if(in_array($indicadorAbcPin,array_keys(self::ABC)))
{
$this->abcPin = self::ABC[$indicadorAbcPin];
}
return $this;
}
/**
* Get etiquetas.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getEtiquetas()
{
return $this->etiquetas;
}
/**
* Add Etiqueta.
*
* @param Etiqueta $etiqueta
*
* @return Producto
*/
public function addEtiqueta(Etiqueta $etiqueta)
{
$this->etiquetas[] = $etiqueta;
return $this;
}
/**
* Get the value of grupoDeMaterial
*/
public function getGrupoDeMaterial(): string
{
return $this->grupoDeMaterial ?? "";
}
/**
* Set the value of grupoDeMaterial
*/
public function setGrupoDeMaterial(string $grupoDeMaterial): self
{
$this->grupoDeMaterial = $grupoDeMaterial;
return $this;
}
/**
* Get the value of cliente
*
* @return string
*/
public function getCliente()
{
return $this->cliente ?? 0;
}
/**
* Set the value of cliente
*
* @param string $cliente
*
* @return self
*/
public function setCliente(string $cliente)
{
$this->cliente = $cliente ?? 0;
return $this;
}
/**
* * Devuelve las presentaciones.
* @return array
*/
public function getPresentaciones(): array
{
$collection = [
//
];
switch ($this->getTipoBoton()) {
case TipoBoton::OPCIONES['accesorio']['id']:
$collection = $this->getPresentacionesAccesorio();
break;
case TipoBoton::OPCIONES['barra']['id']:
$collection = $this->getPresentacionesBarra();
break;
case TipoBoton::OPCIONES['caño']['id']:
$collection = $this->getPresentacionesTubo();
break;
case TipoBoton::OPCIONES['chapa']['id']:
$collection = $this->getPresentacionesChapa();
break;
case TipoBoton::OPCIONES['pack']['id']:
$collection = $this->getPresentacionesPack();
break;
}
if (count($collection)) {
$collection[0]->setChecked(true);
}
return $collection;
}
/**
* * De vuelve las presentaciones del tipo boton "accesorio".
* @return array
*/
public function getPresentacionesAccesorio(): array
{
$collection = [
//
];
$unidad = $this->getUnidadMedidaFacturacion()
->getId();
$precios = $this->getPrecios();
$precioLabel = intval(($precios['PrecioBase'] * 100)) / 100;
if ($this->getMinimoVentaGeneral() > 1 && $this->getMinimoVentaGeneral() != 7 && $this->getMinimoVentaGeneral() != 10) {
$precioLabel = intval(($precios['PrecioBase'] * 100)) / 100 / $this->getMinimoVentaGeneral();
} else {
$precioLabel = intval(($precios['PrecioBase'] * 100)) / 100;
}
switch ($unidad) {
case 'KG':
$presentacion = (Presentacion::bySlug('kilo'))
->setDescuento($precios["descuentoPorcentaje"] ?? 0)
->setMoneda($precios["Konwa"])
->setName($this->getLargoStd1() . " kilogramos")
->setPrecio($precioLabel)
->setUnidad($unidad);
$presentacion->getCantidad()
->setCode($this->getLargo()['minimo'])
->setMax($this->getLargo()['maximo'])
->setMin($this->getLargo()['minimo'])
->setStep($this->getLargo()['paso']);
$collection[] = $presentacion;
break;
case 'M':
$presentacion = (Presentacion::bySlug('metro'))
->setDescuento($precios["descuentoPorcentaje"] ?? 0)
->setMoneda($precios["Konwa"])
->setPrecio($precioLabel)
->setUnidad($unidad);
$presentacion->getCantidad()
->setCode($this->getLargo()['minimo'])
->setMax($this->getLargo()['maximo'])
->setMin($this->getLargo()['minimo'])
->setStep($this->getLargo()['paso']);
$collection[] = $presentacion;
break;
case 'ST':
$collection[] = (Presentacion::bySlug('unidad'))
->setDescuento($precios["descuentoPorcentaje"] ?? 0)
->setMoneda($precios["Konwa"])
->setPrecio($precioLabel)
->setUnidad('UN');
break;
default:
$collection[] = (Presentacion::bySlug('unidad'))
->setDescuento($precios["descuentoPorcentaje"] ?? 0)
->setMoneda($precios["Konwa"])
->setPrecio($precioLabel)
->setUnidad($unidad);
break;
}
return $collection;
}
/**
* * De vuelve las presentaciones del tipo boton "barra".
* @return array
*/
public function getPresentacionesBarra(): array
{
$collection = [
//
];
$unidad = $this->getUnidadMedidaFacturacion()
->getId();
$precios = $this->getPrecios();
$presentacion = (Presentacion::bySlug('tira'))
->setMoneda($precios["Konwa"])
->setName($this->getLargoStd1() . " metros")
->setPrecio($precios['PrecioBase'])
->setUnidad($unidad);
$presentacion->getCantidad()
->setCode($this->getLargoStd1())
->setMin($this->getLargoStd1())
->setStep($this->getLargoStd1());
$collection[] = $presentacion;
if (isset($precios['PrecioMedida']) && isset($precios['PrecioCorte']) && $this->getBotonAMedida()) {
$collection[] = (Presentacion::bySlug('a-medida'))
->setMoneda($precios['Konwa'])
->setPrecio($precios["PrecioMedida"])
->setUnidad($unidad);
}
$conRecortes = $this->getRecortes();
if (isset($precios['PrecioRecorte']) && $conRecortes && count($conRecortes)) {
$collection[] = (Presentacion::bySlug('recortes'))
->setMoneda($precios['Konwa'])
->setUnidad($unidad);
}
return $collection;
}
/**
* * De vuelve las presentaciones del tipo boton "chapa".
* @return array
*/
public function getPresentacionesChapa(): array
{
$collection = [
//
];
$unidad = $this->getUnidadMedidaFacturacion()
->getId();
$precios = $this->getPrecios();
$lotes = $this->getLotes();
if (!empty($lotes)) {
$collection[] = (Presentacion::bySlug('cajon-cerrado'))
->setDescuento(abs($precios["DescLote"]))
->setUnidad($unidad);
}
// $bobinas = $this->getBobinas();
// if (!empty($bobinas)) {
// $collection[] = (Presentacion::bySlug('bobinas'))
// ->setUnidad($unidad);
// }
if (!$this->isBobina()) {
$collection[] = (Presentacion::bySlug('unidad'))
->setDescuento($precios["descuentoPorcentaje"] ?? 0)
->setMoneda($precios["Konwa"])
->setPrecio($precios['PrecioBase'])
->setUnidad($unidad);
}
if ($this->getBotonAMedida()) {
$collection[] = (Presentacion::bySlug('a-medida'))
->setLargo(floatval($this->getValorDeCaracteristica('largo')) / 1000)
->setMoneda($precios["Konwa"])
->setPrecio($precios['PrecioMedida'])
->setUnidad($unidad);
}
return $collection;
}
/**
* * De vuelve las presentaciones del tipo boton "pack".
* @return array
*/
public function getPresentacionesPack(): array
{
$collection = [
//
];
$precios = $this->getPrecios();
$cantidadPack1 = $this->getCantidadPack1();
$cantidadPack2 = $this->getCantidadPack2();
$collectionPack = [
//
];
if (isset($precios['Pack1Kbetr']) && $precios['Pack1Kbetr'] > 0) {
$collectionPack[] = (Presentacion::bySlug('pack-1'))
->setMoneda($precios["Konwa"])
->setName("$cantidadPack1 unidades")
->setPrecio($precios['Pack1Kbetr'] * $cantidadPack1)
->setUnidad("PACK");
}
if (isset($precios['Pack2Kbetr']) && $precios['Pack2Kbetr'] > 0) {
$collectionPack[] = (Presentacion::bySlug('pack-2'))
->setMoneda($precios["Konwa"])
->setName("$cantidadPack2 unidades")
->setPrecio($precios['Pack2Kbetr'] * $cantidadPack2)
->setUnidad("PACK");
}
if ($cantidadPack1 != 1 && $cantidadPack2 != 1 && $this->getPackVisualizacion() < 4) {
$collectionPack[] = (Presentacion::bySlug('suelto'))
->setMoneda($precios["Konwa"])
->setPrecio($precios['PrecioBase'])
->setUnidad("UN");
}
if ($this->getPackVisualizacion() % 4 == '1' && $cantidadPack1 > 0) {
$collectionPrincipal = array_splice($collectionPack, 0, 1);
} else if ($this->getPackVisualizacion() % 4 == '2' && $cantidadPack2 > 0 || $cantidadPack2 > 0 && $cantidadPack1 === 0) {
$collectionPrincipal = array_splice($collectionPack, 1, 1);
} else {
$collectionPrincipal = array_splice($collectionPack, 2, 1);
}
$collection = array_merge($collectionPrincipal, $collectionPack);
return $collection;
}
/**
* * De vuelve las presentaciones del tipo boton "tubo".
* @return array
*/
public function getPresentacionesTubo(): array
{
$collection = [
//
];
$unidad = $this->getUnidadMedidaFacturacion()
->getId();
$precios = $this->getPrecios();
$presentacion = (Presentacion::bySlug('tira'))
->setMoneda($precios["Konwa"])
->setName($this->getLargoStd1() . " metros")
->setPrecio($precios['PrecioBase'])
->setUnidad($unidad);
$presentacion->getCantidad()
->setCode($this->getLargoStd1())
->setMin($this->getLargoStd1())
->setStep($this->getLargoStd1());
$collection[] = $presentacion;
if (isset($precios['PrecioBase2']) && floatval($this->getLargoStd2()) > 0 && floatval($this->getLargoStd2()) != floatval($this->getLargoStd1())) {
$presentacion = (Presentacion::bySlug('tira2'))
->setMoneda($precios["Konwa"])
->setName($this->getLargoStd2() . " metros")
->setPrecio($precios['PrecioBase2'])
->setUnidad($unidad);
$presentacion->getCantidad()
->setCode($this->getLargoStd2())
->setMin($this->getLargoStd2())
->setStep($this->getLargoStd2());
$collection[] = $presentacion;
}
if (isset($precios['PrecioMedida']) && isset($precios['PrecioCorte']) && $this->getBotonAMedida()) {
$collection[] = (Presentacion::bySlug('corte-medida'))
->setMoneda($precios["Konwa"])
->setPrecio($precios['PrecioMedida'])
->setUnidad($unidad);
}
$conRecortes = $this->getRecortes();
if (!empty($conRecortes)) {
$collection[] = (Presentacion::bySlug('recortes-2'))
->setMoneda($precios["Konwa"])
->setUnidad($unidad);
}
return $collection;
}
/**
* * Devuelve las precios.
* @return array|null
*/
public function getPrecios(): array|null
{
return $this->precios;
}
/**
* * Guarda las precios.
* @param array|null $precios
* @return self
*/
public function setPrecios(array|null $precios): self
{
$this->precios = $precios;
return $this;
}
/**
* * Devuelve los recortes.
* @return array
*/
public function getRecortes(): array
{
$collection = [
//
];
if ($this->recortes) {
foreach ($this->recortes as $array) {
if (isset($array['precioxtira'])) {
$presentacion = new Recorte($array);
if (!$array['inoxsale']) {
$presentacion->setDescuento(0);
}
$collection[] = $presentacion;
}
}
}
return $collection;
}
/**
* * Guarda los recortes.
* @param array|null $recortes
* @return self
*/
public function setRecortes(array|null $recortes): self
{
$this->recortes = $recortes;
return $this;
}
/**
* * Devuelve el TipoMVKO.
* @return TipoMVKO|null
*/
public function getTipoMVKO(): TipoMVKO|null
{
return TipoMVKO::bySubfamilia($this->getSubFamilia()->getId());
}
/**
* * Devuelve el valor de cada paso que puede dar el input largo.
* @return float
*/
public function getValorPaso()
{
switch ($this->getTipoBoton()) {
case TipoBoton::OPCIONES['accesorio']['id']:
return 1;
case TipoBoton::OPCIONES['barra']['id']:
case TipoBoton::OPCIONES['caño']['id']:
return 0.01;
case TipoBoton::OPCIONES['chapa']['id']:
return 0.5;
default:
return 0.05;
}
}
/**
* * Devuelve los viniles.
* @return array
*/
public function getViniles(): array
{
$collection = [
//
];
if ($this->viniles) {
foreach ($this->viniles as $array) {
$vinil = Vinil::get($array['tipo']);
if (isset($array['selected']) && $array['selected']) {
$vinil->setSelected(true);
}
$collection[] = $vinil;
}
}
return $collection;
}
/**
* * Guarda los viniles.
* @param array|null $viniles
* @return self
*/
public function setViniles(array|null $viniles): self
{
$this->viniles = $viniles;
return $this;
}
/**
* * Devuelve el breadcrumb.
* @return array
*/
public function getBreadcrumb(): array
{
$breadcrumb = [
//
];
$breadcrumb[] = [
'texto' => "Todos los materiales",
'enlace' => "/producto/?nombreEs=*",
];
if ($this->getSubFamilia()) {
$subFamilia = $this->getSubFamilia()->getSlugEs();
$breadcrumb[] = [
'texto' => $this->getSubFamilia()->getNombreEs(),
'enlace' => "/producto/?sub-familia=$subFamilia",
];
}
if ($this->getNombreEs()) {
$breadcrumb[] = [
'texto' => $this->getNombreEs(),
'enlace' => '',
];
}
return $breadcrumb;
}
/**
* * Devuelve los cortes.
* @return array
*/
public function getCortes(): array
{
$cortes = Corte::byTipoBoton($this->getTipoBoton());
foreach ($cortes as $corte) {
if ($this->getTipoBoton() == TipoBoton::OPCIONES['barra']['id']) {
switch ($this->getCortePrecision()) {
case Corte::ES_OBLIGATORIO:
switch ($corte->getId()) {
case Corte::OPCIONES['estandar']['id']:
$corte->setDisabled(true);
$corte->setTolerancia($this->getValorMinimoMedida());
break;
case Corte::OPCIONES['precision']['id']:
$corte->setChecked(true);
break;
}
break;
case Corte::ES_OPCIONAL:
switch ($corte->getId()) {
case Corte::OPCIONES['estandar']['id']:
if ($this->getValorMinimoMedida() < 0.1) {
$corte->setDisabled(true);
} else {
$corte->setChecked(true);
}
$corte->setTolerancia(0.1);
break;
case Corte::OPCIONES['precision']['id']:
if ($this->getValorMinimoMedida() < 0.1) {
$corte->setChecked(true);
}
break;
}
break;
default:
switch ($corte->getId()) {
case Corte::OPCIONES['estandar']['id']:
$corte->setChecked(true);
$corte->setTolerancia($this->getValorMinimoMedida());
break;
case Corte::OPCIONES['precision']['id']:
$corte->setDisabled(true);
break;
}
break;
}
} else if ($this->getTipoBoton() == TipoBoton::OPCIONES['chapa']['id']) {
switch ($corte->getId()) {
case Corte::OPCIONES['largo-especifico']['id']:
$corte->setChecked(true);
break;
case Corte::OPCIONES['cortes-especiales']['id']:
$corte->setDisabled(true);
break;
}
}
}
return $cortes;
}
/**
* * Devuelve el largo.
* @return array
*/
public function getLargo(): array
{
$maximo = floatval($this->getValorMaximoMedida());
$minimo = floatval($this->getValorMinimoMedida());
$paso = $this->getValorPaso();
if ($this->getTipoBoton() == TipoBoton::OPCIONES['accesorio']['id']) {
$unidad = $this->getUnidadMedidaFacturacion()
->getId();
if ($unidad == 'KG') {
$maximo = null;
$minimo = $this->getLargoStd1();
$paso = $this->getLargoStd1();
} else if ($unidad == 'M') {
$maximo = null;
$minimo = $this->getLargoStd1();
if ($this->getMinimoVentaGeneral()) {
$minimo = $this->getMinimoVentaGeneral() ?? $this->getLargoStd1();
}
}
}
$unidad = $this->getUnidadMedidaStock()
->getId();
switch ($unidad) {
case 'KG':
$unidad = [
'plural' => 'kg',
'singular' => 'kg',
];
break;
default:
$unidad = [
'plural' => 'm',
'singular' => 'm',
];
break;
}
return [
'unidad' => $unidad,
'maximo' => $maximo,
'minimo' => $minimo,
'paso' => $paso,
'STD1' => $this->getLargoStd1(),
'STD2' => $this->getLargoStd2(),
];
}
/**
* * Devuelve las varbiables.
* @return array
*/
public function getVariables(): array
{
$variables = [
//
];
if ($this->getTipoBoton() == TipoBoton::OPCIONES['mvko']['id']) {
$tipoMVKO = $this->getTipoMVKO();
$dataMV = $this->getDataMV();
foreach ($tipoMVKO->getVariables() as $id_variable) {
$variable = Variable::get($id_variable);
foreach ($dataMV as $name => $value) {
if (preg_match("/(Validacion )(\d+)/", $name)) {
if (gettype($variable->getPvi_variable_max()) == 'string') {
if (preg_match($variable->getPvi_variable_max(), $value)) {
$variable->setPvi_variable_max(floatval(preg_replace($variable->getPvi_variable_max(), '$3', $value)));
continue;
}
} else if (gettype($variable->getPvi_variable_max_2()) == 'string') {
if (preg_match($variable->getPvi_variable_max_2(), $value)) {
$variable->setPvi_variable_max_2(floatval(preg_replace($variable->getPvi_variable_max_2(), '$3', $value)));
continue;
}
} else if (gettype($variable->getPvi_variable_max_3()) == 'string') {
if (preg_match($variable->getPvi_variable_max_3(), $value)) {
$variable->setPvi_variable_max_3(floatval(preg_replace($variable->getPvi_variable_max_3(), '$3', $value)));
continue;
}
}
if (gettype($variable->getMax()) == 'string') {
if (preg_match($variable->getMax(), $value)) {
$max = floatval(preg_replace($variable->getMax(), '$3', $value));
if (!preg_match("/<=/", $value)) {
$max -= 1;
}
$variable->setMax($max);
continue;
}
}
if (gettype($variable->getMin()) == 'string') {
if (preg_match($variable->getMin(), $value)) {
$min = floatval(preg_replace($variable->getMin(), '$3', $value));
if (in_array($id_variable, [ Variable::OPCIONES['pvi_diamext']['id'], ]) || !(preg_match("/>=/", $value))) {
$min += 1;
}
$variable->setMin($min);
continue;
}
}
if (gettype($variable->getPvi_espesor_max()) == 'string') {
if (preg_match($variable->getPvi_espesor_max(), $value)) {
$variable->setPvi_espesor_max(floatval(preg_replace($variable->getPvi_espesor_max(), '$6', $value)));
continue;
}
} else if (gettype($variable->getPvi_espesor_max_2()) == 'string') {
if (preg_match($variable->getPvi_espesor_max_2(), $value)) {
$variable->setPvi_espesor_max_2(floatval(preg_replace($variable->getPvi_espesor_max_2(), '$6', $value)));
continue;
}
}
}
}
if ($id_variable == Variable::OPCIONES['pvi_espesor']['id']) {
$opciones = [
//
];
$max = false;
$min = false;
foreach ($dataMV['Espesores Validos'] as $value) {
$value = floatval($value);
if ((gettype($variable->getMin()) == 'string' || $value >= $variable->getMin()) && (gettype($variable->getMax()) == 'string' || $value <= $variable->getMax())) {
$opciones[] = $value;
if (!$min || $min > $value) {
$min = $value;
}
if (!$max || $max < $value) {
$max = $value;
}
}
}
if (gettype($variable->getMin()) == 'string' || $variable->getMin() == 0 || $variable->getMin() < $min) {
$variable->setMin($min);
}
if (gettype($variable->getMax()) == 'string' || $variable->getMax() == 0 || $variable->getMax() > $max) {
$variable->setMax($max);
}
$variable->setOpciones($opciones);
}
$variables[] = $variable->__toArray();
}
}
return $variables;
}
/**
* * Devuelve los lotes.
* @return array
*/
public function getLotes(): array
{
$collection = [
//
];
$precios = $this->getPrecios();
if ($this->lotes) {
foreach ($this->lotes as $stdClass) {
$presentacion = new Lote([
'centroNombre' => $stdClass->CentroNombre,
'descuento' => $stdClass->DescuentoLote,
'inoxsale' => !empty($stdClass->Inoxsale),
'moneda' => $precios["Konwa"],
'nombre' => $stdClass->Charg,
'peso' => floatval($stdClass->Carac),
'precio' => floatval($stdClass->Precio),
'precioTotal' => floatval($stdClass->PrecioTotal),
'selected' => $stdClass->Seleccionado,
'stock' => intval($stdClass->Stock),
]);
$collection[] = $presentacion;
}
}
return $collection;
}
/**
* * Guarda los lotes.
* @param array $lotes
* @return self
*/
public function setLotes(array $lotes): self
{
$this->lotes = $lotes;
return $this;
}
/**
* * Devuelve las bobinas.
* @return array
*/
public function getBobinas(): array
{
return $this->bobinas;
}
/**
* * Guarda las bobinas.
* @param array $bobinas
* @return self
*/
public function setBobinas(array $bobinas): self
{
$this->bobinas = $bobinas;
return $this;
}
/**
* * Devuelve el producto en formato array.
* @return array
*/
public function __toArray(): array
{
$params = [
//
];
$params['breadcrumb'] = $this->getBreadcrumb();
$params['cantidadPacks'] = [
$this->getCantidadPack1(),
$this->getCantidadPack2(),
];
$params['caracteristicas'] = [
//
];
foreach ($this->getCaracteristicasValorEnOrden() as $caracteristica) {
$params['caracteristicas'][] = $caracteristica;
}
$params['codigo'] = $this->getCodigo();
$params['cortes'] = [
//
];
$params['cortePrecision'] = $this->getCortePrecision();
foreach ($this->getCortes() as $corte) {
$params['cortes'][] = $corte->__toArray();
}
$params['descripcion'] = $this->getSubfamilia()->getTextoExtEs();
$params['esInmovilizado'] = $this->isInmovilizado();
$params['esInoxsale'] = $this->isInoxsale();
$params['esMalla'] = $this->getGrupoDeMaterial() == "M";
$params['esCable'] = $this->getMinimoVentaGeneral() == 7 && $this->getGrupoDeMaterial() == "CAI";
$params['formaCortes'] = [
//
];
$params['imagenes'] = $this->getImagenesConExtension();
$params['lado'] = null;
$params['largo'] = $this->getLargo();
$params['lotes'] = [
//
];
foreach ($this->getLotes() as $lote) {
$params['lotes'][] = $lote->__toArray();
}
$params['nombre'] = $this->getNombreEs();
$params['precios'] = $this->getPrecios();
$params['presentaciones'] = [
//
];
foreach ($this->getPresentaciones() as $presentacion) {
$params['presentaciones'][] = $presentacion->__toArray();
}
$params['recortes'] = [
//
];
foreach ($this->getRecortes() as $recorte) {
$params['recortes'][] = $recorte->__toArray();
}
$params['tieneCortesEspeciales'] = false; // * En primera instancia no se van a mostrar los cortes especiales, tenemos que analizar que tan complejo es, y si hay algo que obviamos
$params['tipoBoton'] = ($this->getTipoBotonEntity())->__toArray();
$params['tipoCortes'] = [
//
];
$params['tipoMVKO'] = $this->getTipoMVKO();
if ($params['tipoMVKO']) {
$params['tipoMVKO'] = $params['tipoMVKO']->__toArray();
}
$params['unidadMedidaFacturacion'] = ($this->getUnidadMedidaFacturacion())->__toArray();
$params['unidadMedidaStock'] = ($this->getUnidadMedidaStock())->__toArray();
$params['variables'] = $this->getVariables();
$params['video'] = $this->getVideo();
$params['viniles'] = [
//
];
foreach ($this->getViniles() as $vinil) {
$params['viniles'][] = $vinil->__toArray();
}
return $params;
}
}