src/AppBundle/Entity/Producto.php line 24

  1. <?php
  2. namespace AppBundle\Entity;
  3. use AppBundle\Entity\Producto\Corte;
  4. use AppBundle\Entity\Producto\Lote;
  5. use AppBundle\Entity\Producto\Presentacion;
  6. use AppBundle\Entity\Producto\Recorte;
  7. use AppBundle\Entity\Producto\TipoBoton;
  8. use AppBundle\Entity\Producto\TipoMVKO;
  9. use AppBundle\Entity\Producto\Variable;
  10. use AppBundle\Entity\Producto\Vinil;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Doctrine\Common\Collections\ArrayCollection;
  13. use Symfony\Component\String\Slugger\AsciiSlugger;
  14. /**
  15.  * Producto.
  16.  *
  17.  * @ORM\Table(name="producto")
  18.  * @ORM\Entity(repositoryClass="AppBundle\Repository\ProductoRepository")
  19.  * @ORM\HasLifecycleCallbacks()
  20.  */
  21. class Producto
  22. {
  23.     const CORTE_PRECISION_OBLIGATORIO 'X';
  24.     const CORTE_PRECISION_OPCIONAL 'O';
  25.     const CORTE_PRECISION_NO_APLICA '';
  26.     const TIPO_BOTON_ACCESORIO 1;
  27.     const TIPO_BOTON_BULONERIA 2;
  28.     const TIPO_BOTON_CAÑO 3;
  29.     const TIPO_BOTON_CHAPA 4;
  30.     const TIPO_BOTON_BARRA 5;
  31.     const TIPO_BOTON_BOBINA 6;
  32.     const TIPO_BOTON_MVKO 7;
  33.     const TIPO_BOTON_MVSE 8;
  34.     const ID_BOTON_ESTANDAR 'STD';
  35.     const ID_BOTON_ESTANDAR_DOS 'ST2';
  36.     const ID_BOTON_A_MEDIDA 'ASM';    
  37.     const ID_BOTON_RECORTES 'RCT';
  38.     
  39.     const ID_FAMILIA_BULONERIA '503';
  40.     const ABC = [
  41.         'T' => 1,
  42.         'A' => 2,
  43.         'B' => 3,
  44.         'C' => 4,
  45.         'X' => 5,
  46.         'S' => 6,
  47.         'R' => 8,
  48.         'Q' => 9
  49.     ];
  50.     
  51.     /**
  52.      * @var int
  53.      *
  54.      * @ORM\Column(name="id", type="integer")
  55.      * @ORM\Id
  56.      * @ORM\GeneratedValue(strategy="AUTO")
  57.      */
  58.     private $id;
  59.     /**
  60.      * @var string
  61.      *
  62.      * @ORM\Column(name="codigo", type="string", length=50, unique=true)
  63.      */
  64.     private $codigo;
  65.     /**
  66.      * @var string
  67.      *
  68.      * @ORM\Column(name="nombre_es", type="string", length=300)
  69.      */
  70.     private $nombreEs;
  71.     /**
  72.      * @var string
  73.      *
  74.      * @ORM\Column(name="nombre_en", type="string", length=300)
  75.      */
  76.     private $nombreEn;
  77.     /**
  78.      * @var string
  79.      *
  80.      * @ORM\Column(name="precio", type="float")
  81.      */
  82.     private $precio;
  83.     /**
  84.      * @var string
  85.      *
  86.      * @ORM\Column(name="slug_es", type="string", length=300)
  87.      */
  88.     private $slugEs;
  89.     /**
  90.      * @var string
  91.      *
  92.      * @ORM\Column(name="slug_en", type="string", length=300)
  93.      */
  94.     private $slugEn;
  95.     /**
  96.      * @var \DateTime
  97.      *
  98.      * @ORM\Column(name="fecha_creacion", type="datetime")
  99.      */
  100.     private $fechaCreacion;
  101.     /**
  102.      * @var \DateTime
  103.      *
  104.      * @ORM\Column(name="fecha_actualizacion", type="datetime", options={"default"="CURRENT_TIMESTAMP"}))
  105.      */
  106.     private $fechaActualizacion;
  107.     /**
  108.      * @var string
  109.      *
  110.      * @ORM\Column(name="fecha_update_solr", type="datetime", nullable=true)
  111.      */
  112.     private $fechaUpdateSolr;
  113.     /**
  114.      * @var bool
  115.      *
  116.      * @ORM\Column(name="activo", type="boolean")
  117.      */
  118.     private $activo;
  119.     /**
  120.      * @var bool
  121.      *
  122.      * @ORM\Column(name="eliminado", type="boolean")
  123.      */
  124.     private $eliminado false;
  125.     /**
  126.      * @ORM\ManyToMany(targetEntity="CaracteristicaValor", inversedBy="productos")
  127.      * @ORM\JoinTable(name="producto_caracteristica_valor",
  128.      * joinColumns={@ORM\JoinColumn(name="producto_id", referencedColumnName="id")},
  129.      * inverseJoinColumns={@ORM\JoinColumn(name="caracteristica_valor_id", referencedColumnName="id")}
  130.      * )
  131.      */
  132.     protected $caracteristicasValor;
  133.     /**
  134.      * @ORM\ManyToOne(targetEntity="SubFamilia", inversedBy="productos")
  135.      * @ORM\JoinColumn(name="sub_familia_id", referencedColumnName="id")
  136.      */
  137.     protected $subFamilia;
  138.     /**
  139.      * @ORM\ManyToOne(targetEntity="Abc")
  140.      * @ORM\JoinColumn(name="abc_id", referencedColumnName="id")
  141.      */
  142.     protected $abc;
  143.     /**
  144.      * @ORM\ManyToOne(targetEntity="Abc")
  145.      * @ORM\JoinColumn(name="abc_pin_id", referencedColumnName="id")
  146.      */
  147.     protected $abcPin;
  148.     /**
  149.      * @ORM\ManyToOne(targetEntity="GrupoMultimedia", inversedBy="productos")
  150.      * @ORM\JoinColumn(name="grupo_multimedia_id", referencedColumnName="id")
  151.      */
  152.     protected $grupoMultimedia;
  153.     /**
  154.      * @var string
  155.      *
  156.      * @ORM\Column(name="busqueda_es", type="text")
  157.      */
  158.     private $busquedaEs;
  159.     /**
  160.      * @var string
  161.      *
  162.      * @ORM\Column(name="indicador_abc", type="text")
  163.      */
  164.     private $indicadorAbc;
  165.     /**
  166.      * @var string
  167.      *
  168.      * @ORM\Column(name="indicador_abc_pin", type="text")
  169.      */
  170.     private $indicadorAbcPin;
  171.     /**
  172.      * @var string
  173.      *
  174.      * @ORM\Column(name="texto_breve", type="text")
  175.      */
  176.     private $textoBreve;
  177.     /**
  178.      * @var string
  179.      *
  180.      * @ORM\Column(name="busqueda_en", type="text")
  181.      */
  182.     private $busquedaEn;
  183.     /**
  184.      * @var string
  185.      *
  186.      * @ORM\Column(name="peso_bruto", type="string", length=8)
  187.      */
  188.     private $pesoBruto;
  189.     /**
  190.      * @var string
  191.      *
  192.      * @ORM\Column(name="peso_neto", type="string", length=8)
  193.      */
  194.     private $pesoNeto;
  195.     /**
  196.      * @ORM\ManyToOne(targetEntity="UnidadMedida", cascade={"persist"})
  197.      * @ORM\JoinColumn(name="unidad_medida_stock", referencedColumnName="id")
  198.      */
  199.     protected $unidadMedidaStock;
  200.     /**
  201.      * @ORM\ManyToOne(targetEntity="UnidadMedida", cascade={"persist"})
  202.      * @ORM\JoinColumn(name="unidad_medida_facturacion", referencedColumnName="id")
  203.      */
  204.     protected $unidadMedidaFacturacion;
  205.     /**
  206.      * @var int
  207.      *
  208.      * @ORM\Column(name="cantidad_pack1", type="integer")
  209.      */
  210.     private $cantidadPack1;
  211.     /**
  212.      * @var int
  213.      *
  214.      * @ORM\Column(name="cantidad_pack2", type="integer")
  215.      */
  216.     private $cantidadPack2;
  217.     /**
  218.      * @var int
  219.      *
  220.      * @ORM\Column(name="pack_visualizacion", type="integer")
  221.      */
  222.     private $packVisualizacion;
  223.     /**
  224.      * @var bool
  225.      *
  226.      * @ORM\Column(name="en_oferta", type="boolean")
  227.      */
  228.     private $enOferta;
  229.     /**
  230.      * @var bool
  231.      *
  232.      * @ORM\Column(name="en_stock", type="boolean")
  233.      */
  234.     private $enStock;
  235.     /**
  236.      * @var string
  237.      *
  238.      * @ORM\Column(name="stock_sucursales", type="text", nullable=true)
  239.      */
  240.     private $stockEnSucursales;
  241.     /**
  242.      * @ORM\OneToMany(targetEntity="MaterialUnidadMedida", mappedBy="material", cascade={"persist"}, orphanRemoval=true)
  243.      */
  244.     protected $materialesUnidadMedida;
  245.     /**
  246.      * @var string
  247.      *
  248.      * @ORM\Column(name="tipo_boton", type="integer")
  249.      */
  250.     private $tipoBoton;
  251.     /**
  252.      * @var bool
  253.      *
  254.      * @ORM\Column(name="boton_recorte", type="boolean")
  255.      */
  256.     private $botonRecorte;
  257.     /**
  258.      * @var bool
  259.      *
  260.      * @ORM\Column(name="boton_a_medida", type="boolean")
  261.      */
  262.     private $botonAMedida;
  263.     /**
  264.      * @var string
  265.      *
  266.      * @ORM\Column(name="minimo_venta_general", type="float")
  267.      */
  268.     private $minimoVentaGeneral;
  269.     /**
  270.      * @var decimal
  271.      *
  272.      * @ORM\Column(name="valor_minimo_medida", type="decimal", precision=13, scale=3)
  273.      */
  274.     private $valorMinimoMedida;
  275.     /**
  276.      * @var decimal
  277.      *
  278.      * @ORM\Column(name="valor_maximo_medida", type="decimal", precision=13, scale=3)
  279.      */
  280.     private $valorMaximoMedida;
  281.     /**
  282.      * @var string
  283.      *
  284.      * @ORM\Column(type="integer")
  285.      */
  286.     private $largoStd1;
  287.     /**
  288.      * @var string
  289.      *
  290.      * @ORM\Column(type="integer")
  291.      */
  292.     private $largoStd2;
  293.     
  294.     protected $itemsCarrito;
  295.     /**
  296.      * @var string
  297.      *
  298.      * @ORM\Column(name="prom_ventas", type="float")
  299.      */
  300.     protected $promVentas;
  301.     /**
  302.      * @var string
  303.      *
  304.      * @ORM\Column(name="prom_ventas_old", type="float")
  305.      */
  306.     protected $promVentasOld;
  307.     /**
  308.      * @var string
  309.      *
  310.      * @ORM\Column(name="corte_precision", type="string", length=1)
  311.      */
  312.     private $cortePrecision;
  313.     /**
  314.      * @var string
  315.      *
  316.      * @ORM\Column(name="data_mv", type="text", nullable=true)
  317.      */
  318.     private $dataMV;
  319.     /**
  320.      * @var bool
  321.      *
  322.      * @ORM\Column(name="es_mvse", type="boolean")
  323.      */
  324.     private $esMvse false;
  325.     /**
  326.      * @var bool
  327.      *
  328.      * @ORM\Column(name="inoxsale", type="boolean" , nullable=false, options={"default"=0})
  329.      */
  330.     private $inoxsale false;
  331.     /**
  332.      * @var bool
  333.      *
  334.      * @ORM\Column(name="inmovilizado", type="boolean" , nullable=false, options={"default"=0})
  335.      */
  336.     private $inmovilizado false;
  337.     /**
  338.      * @var bool
  339.      *
  340.      * @ORM\Column(name="bobina", type="boolean" , nullable=false, options={"default"=0})
  341.      */
  342.     private $bobina false;
  343.     /**
  344.      * @var bool
  345.      *
  346.      * @ORM\Column(name="leyendaOpCompra", type="boolean")
  347.      */
  348.     private $leyendaOpCompra false;
  349.     /**
  350.      * @var bool
  351.      *
  352.      * @ORM\Column(name="noUruguay", type="boolean", nullable=true, options={"default"=0})
  353.      */
  354.     private $noUruguay false;
  355.     /**
  356.      * @ORM\ManyToMany(targetEntity="Etiqueta", mappedBy="productos", cascade={"persist"})
  357.      */
  358.     private $etiquetas;
  359.     /**
  360.      * @var string
  361.      *
  362.      * @ORM\Column(name="grupoDeMaterial", type="string" , nullable=true)
  363.      */
  364.     private $grupoDeMaterial false;
  365.     /**
  366.      * @var string
  367.      *
  368.      * @ORM\Column(name="cliente", type="string" , nullable=true)
  369.      */
  370.     private $cliente false;
  371.     /**
  372.      * @var array|null
  373.      */
  374.     private array|null $precios null;
  375.     /**
  376.      * @var array|null
  377.      */
  378.     private array|null $recortes null;
  379.     /**
  380.      * @var array|null
  381.      */
  382.     private array|null $viniles null;
  383.     /**
  384.      * @var array
  385.      */
  386.     private array $lotes = [
  387.         // 
  388.     ];
  389.     /**
  390.      * @var array|null
  391.      */
  392.     private array|null $bobinas null;
  393.     /**
  394.      * Constructor.
  395.      */
  396.     public function __construct()
  397.     {
  398.         $this->fechaCreacion = new \DateTime();
  399.         $this->caracteristicasValor = new ArrayCollection();
  400.         $this->materialesUnidadMedida = new ArrayCollection();
  401.         $this->etiquetas = new ArrayCollection();
  402.     }
  403.     /**
  404.      * Get id.
  405.      *
  406.      * @return int
  407.      */
  408.     public function getId()
  409.     {
  410.         return $this->id;
  411.     }
  412.     /**
  413.      * Get id.
  414.      *
  415.      * @return int
  416.      */
  417.     public function setId($id)
  418.     {
  419.         $this->id $id;
  420.         return $this;
  421.     }
  422.     /**
  423.      * Set nombreEs.
  424.      *
  425.      * @param string $nombreEs
  426.      *
  427.      * @return Producto
  428.      */
  429.     public function setNombreEs($nombreEs)
  430.     {
  431.         $this->nombreEs $nombreEs;
  432.         return $this;
  433.     }
  434.     /**
  435.      * Get nombreEs.
  436.      *
  437.      * @return string
  438.      */
  439.     public function getNombreEs()
  440.     {
  441.         return $this->nombreEs;
  442.     }
  443.     /**
  444.      * Set nombreEn.
  445.      *
  446.      * @param string $nombreEn
  447.      *
  448.      * @return Producto
  449.      */
  450.     public function setNombreEn($nombreEn)
  451.     {
  452.         $this->nombreEn $nombreEn;
  453.         return $this;
  454.     }
  455.     /**
  456.      * Get nombreEn.
  457.      *
  458.      * @return string
  459.      */
  460.     public function getNombreEn()
  461.     {
  462.         return $this->nombreEn;
  463.     }
  464.     /**
  465.      * Set fechaCreacion.
  466.      *
  467.      * @param \DateTime $fechaCreacion
  468.      *
  469.      * @return Producto
  470.      */
  471.     public function setFechaCreacion($fechaCreacion)
  472.     {
  473.         $this->fechaCreacion $fechaCreacion;
  474.         return $this;
  475.     }
  476.     /**
  477.      * Get fechaCreacion.
  478.      *
  479.      * @return \DateTime
  480.      */
  481.     public function getFechaCreacion()
  482.     {
  483.         return $this->fechaCreacion;
  484.     }
  485.     /**
  486.      * Set fechaActualizacion.
  487.      *
  488.      * @param \DateTime $fechaActualizacion
  489.      *
  490.      * @return Producto
  491.      */
  492.     public function setFechaActualizacion($fechaActualizacion)
  493.     {
  494.         $this->fechaActualizacion $fechaActualizacion;
  495.         return $this;
  496.     }
  497.     /**
  498.      * Get fechaActualizacion.
  499.      *
  500.      * @return \DateTime
  501.      */
  502.     public function getFechaActualizacion()
  503.     {
  504.         return $this->fechaActualizacion;
  505.     }
  506.     /**
  507.      * Set fechaActualizacion.
  508.      *
  509.      * @param \DateTime $fechaUpdateSolr
  510.      *
  511.      * @return Producto
  512.      */
  513.     public function setFechaUpdateSolr($fechaUpdateSolr)
  514.     {
  515.         $this->fechaUpdateSolr $fechaUpdateSolr;
  516.         return $this;
  517.     }
  518.     /**
  519.      * Get fechaUpdateSolr.
  520.      *
  521.      * @return \DateTime
  522.      */
  523.     public function getFechaUpdateSolr()
  524.     {
  525.         return $this->fechaUpdateSolr;
  526.     }
  527.     /**
  528.      * Set activo.
  529.      *
  530.      * @param bool $activo
  531.      *
  532.      * @return Producto
  533.      */
  534.     public function setActivo($activo)
  535.     {
  536.         $this->activo $activo;
  537.         return $this;
  538.     }
  539.     /**
  540.      * Get activo.
  541.      *
  542.      * @return bool
  543.      */
  544.     public function getActivo()
  545.     {
  546.         return $this->activo;
  547.     }
  548.     /**
  549.      * Set codigo.
  550.      *
  551.      * @param string $codigo
  552.      *
  553.      * @return Producto
  554.      */
  555.     public function setCodigo($codigo)
  556.     {
  557.         $this->codigo $codigo;
  558.         return $this;
  559.     }
  560.     /**
  561.      * Get codigo.
  562.      *
  563.      * @return string
  564.      */
  565.     public function getCodigo()
  566.     {
  567.         return $this->codigo;
  568.     }
  569.     /**
  570.      * Set subFamilia.
  571.      *
  572.      * @param \AppBundle\Entity\SubFamilia $subFamilia
  573.      *
  574.      * @return Producto
  575.      */
  576.     public function setSubFamilia(\AppBundle\Entity\SubFamilia $subFamilia null)
  577.     {
  578.         $this->subFamilia $subFamilia;
  579.         return $this;
  580.     }
  581.     /**
  582.      * Get subFamilia.
  583.      *
  584.      * @return \AppBundle\Entity\SubFamilia
  585.      */
  586.     public function getSubFamilia()
  587.     {
  588.         return $this->subFamilia;
  589.     }
  590.     /**
  591.      * Add caracteristicasValor.
  592.      *
  593.      * @param \AppBundle\Entity\CaracteristicaValor $caracteristicasValor
  594.      *
  595.      * @return Producto
  596.      */
  597.     public function addCaracteristicaValor(\AppBundle\Entity\CaracteristicaValor $caracteristicaValor)
  598.     {
  599.         if ($this->caracteristicasValor->contains($caracteristicaValor)) {
  600.             return;
  601.         }
  602.         $caracteristicaValor->addProducto($this);
  603.         $this->caracteristicasValor[] = $caracteristicaValor;
  604.         return $this;
  605.     }
  606.     /**
  607.      * Remove caracteristicasValor.
  608.      *
  609.      * @param \AppBundle\Entity\CaracteristicaValor $caracteristicaValor
  610.      */
  611.     public function removeCaracteristicaValor(\AppBundle\Entity\CaracteristicaValor $caracteristicaValor)
  612.     {
  613.         $caracteristicaValor->removeProducto($this);
  614.         $this->caracteristicasValor->removeElement($caracteristicaValor);
  615.     }
  616.     /**
  617.      * Remove caracteristicasValor.
  618.      *
  619.      * @param \AppBundle\Entity\CaracteristicaValor $caracteristicaValor
  620.      */
  621.     public function removerRelacionCaracteristicaValor($idCaracteristica)
  622.     {   
  623.         foreach ($this->caracteristicasValor as $caracteristicaValor) {
  624.             if($caracteristicaValor->getCaracteristica()->getId() == $idCaracteristica){
  625.                 $this->caracteristicasValor->removeElement($caracteristicaValor);
  626.             }            
  627.         }                     
  628.     }
  629.     /**
  630.      * Remove caracteristicasValor.
  631.      */
  632.     public function removeCaracteristicasValor()
  633.     {
  634.         foreach ($this->caracteristicasValor as $caracteristicaValor) {
  635.             $this->caracteristicasValor->removeElement($caracteristicaValor);
  636.         }
  637.     }
  638.     /**
  639.      * Get caracteristicasValor.
  640.      *
  641.      * @return \Doctrine\Common\Collections\Collection
  642.      */
  643.     public function getCaracteristicasValor()
  644.     {
  645.         return $this->caracteristicasValor;
  646.     }
  647.     /**
  648.      * Add materialUnidadMedida.
  649.      *
  650.      * @param \AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida
  651.      *
  652.      * @return Producto
  653.      */
  654.     public function addMaterialUnidadMedida(\AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida)
  655.     {
  656.         $this->materialesUnidadMedida[] = $materialUnidadMedida;
  657.         return $this;
  658.     }
  659.     /**
  660.      * Remove materialUnidadMedida.
  661.      *
  662.      * @param \AppBundle\Entity\MaterialUnidadMedida $materialUnidadMedida
  663.      */
  664.     public function removeMaterialUnidadMedida(MaterialUnidadMedida $materialUnidadMedida)
  665.     {
  666.         $this->materialesUnidadMedida->removeElement($materialUnidadMedida);
  667.     }
  668.     /**
  669.      * Get materialesUnidadMedida.
  670.      *
  671.      * @return \Doctrine\Common\Collections\Collection
  672.      */
  673.     public function getMaterialesUnidadMedida()
  674.     {
  675.         return $this->materialesUnidadMedida;
  676.     }
  677.     /**
  678.      * Set precio.
  679.      *
  680.      * @param int $precio
  681.      *
  682.      * @return Producto
  683.      */
  684.     public function setPrecio($precio)
  685.     {
  686.         $this->precio $precio;
  687.         return $this;
  688.     }
  689.     /**
  690.      * Get precio.
  691.      *
  692.      * @return int
  693.      */
  694.     public function getPrecio()
  695.     {
  696.         return $this->precio;
  697.     }
  698.     /**
  699.      * Set slugEs.
  700.      *
  701.      * @ORM\PreUpdate
  702.      * @ORM\PrePersist
  703.      *
  704.      * @param string $slugEs
  705.      *
  706.      * @return Producto
  707.      */
  708.     public function setSlugEs()
  709.     {
  710.         $slugify = new AsciiSlugger();
  711.         $this->slugEs $slugify->slug($this->nombreEs)->lower();
  712.         return $this;
  713.     }
  714.     /**
  715.      * Get slugEs.
  716.      *
  717.      * @return string
  718.      */
  719.     public function getSlugEs()
  720.     {
  721.         return $this->slugEs;
  722.     }
  723.     /**
  724.      * Set slugEn.
  725.      *
  726.      * @ORM\PreUpdate
  727.      * @ORM\PrePersist
  728.      *
  729.      * @param string $slugEn
  730.      *
  731.      * @return Producto
  732.      */
  733.     public function setSlugEn()
  734.     {
  735.         $slugify = new AsciiSlugger();
  736.         $this->slugEn $slugify->slug($this->nombreEn)->lower();
  737.         return $this;
  738.     }
  739.     /**
  740.      * Get slugEn.
  741.      *
  742.      * @return string
  743.      */
  744.     public function getSlugEn()
  745.     {
  746.         return $this->slugEn;
  747.     }
  748.     /**
  749.      * Set busquedaEs.
  750.      *
  751.      * @param string $busquedaEs
  752.      *
  753.      * @return Producto
  754.      */
  755.     public function setBusquedaEs($busquedaEs)
  756.     {
  757.         $this->busquedaEs $busquedaEs;
  758.         return $this;
  759.     }
  760.     /**
  761.      * Get busquedaEs.
  762.      *
  763.      * @return string
  764.      */
  765.     public function getBusquedaEs()
  766.     {
  767.         return $this->busquedaEs;
  768.     }
  769.     /**
  770.      * Set busquedaEn.
  771.      *
  772.      * @param string $busquedaEn
  773.      *
  774.      * @return Producto
  775.      */
  776.     public function setBusquedaEn($busquedaEn)
  777.     {
  778.         $this->busquedaEn $busquedaEn;
  779.         return $this;
  780.     }
  781.     /**
  782.      * Get busquedaEn.
  783.      *
  784.      * @return string
  785.      */
  786.     public function getBusquedaEn()
  787.     {
  788.         return $this->busquedaEn;
  789.     }
  790.     /**
  791.      * Set pesoNeto.
  792.      *
  793.      * @param string $pesoNeto
  794.      *
  795.      * @return Producto
  796.      */
  797.     public function setPesoNeto($pesoNeto)
  798.     {
  799.         $this->pesoNeto $pesoNeto;
  800.         return $this;
  801.     }
  802.     /**
  803.      * Get pesoNeto.
  804.      *
  805.      * @return string
  806.      */
  807.     public function getPesoNeto()
  808.     {
  809.         return $this->pesoNeto;
  810.     }
  811.     /**
  812.      * Set peroBruto.
  813.      *
  814.      * @param string $pesoBruto
  815.      *
  816.      * @return Producto
  817.      */
  818.     public function setPesoBruto($pesoBruto)
  819.     {
  820.         $this->pesoBruto $pesoBruto;
  821.         return $this;
  822.     }
  823.     /**
  824.      * Get pesoBruto.
  825.      *
  826.      * @return string
  827.      */
  828.     public function getPesoBruto()
  829.     {
  830.         return $this->pesoBruto;
  831.     }
  832.     /**
  833.      * Set unidadmedidaStock.
  834.      *
  835.      * @param decimal $unidadmedidaStock
  836.      *
  837.      * @return Producto
  838.      */
  839.     public function setUnidadMedidaStock($unidadMedidaStock)
  840.     {
  841.         $this->unidadMedidaStock $unidadMedidaStock;
  842.         return $this;
  843.     }
  844.     /**
  845.      * Get unidadMedidaStock.
  846.      *
  847.      * @return decimal
  848.      */
  849.     public function getUnidadMedidaStock()
  850.     {
  851.         return $this->unidadMedidaStock;
  852.     }
  853.     /**
  854.      * Set unidadmedidaFacturacion.
  855.      *
  856.      * @param decimal $unidadmedidaFacturacion
  857.      *
  858.      * @return Producto
  859.      */
  860.     public function setUnidadMedidaFacturacion($unidadMedidaFacturacion)
  861.     {
  862.         $this->unidadMedidaFacturacion $unidadMedidaFacturacion;
  863.         return $this;
  864.     }
  865.     /**
  866.      * Get unidadmedidaFacturacion.
  867.      *
  868.      * @return decimal
  869.      */
  870.     public function getUnidadMedidaFacturacion()
  871.     {
  872.         return $this->unidadMedidaFacturacion;
  873.     }
  874.     /**
  875.      * Set cantidadPack1.
  876.      *
  877.      * @param int $cantidadPack1
  878.      *
  879.      * @return Producto
  880.      */
  881.     public function setCantidadPack1($cantidadPack1)
  882.     {
  883.         $this->cantidadPack1 $cantidadPack1;
  884.         return $this;
  885.     }
  886.     /**
  887.      * Get cantidadPack1.
  888.      *
  889.      * @return int
  890.      */
  891.     public function getCantidadPack1()
  892.     {
  893.         return $this->cantidadPack1;
  894.     }
  895.     /**
  896.      * Set cantidadPack2.
  897.      *
  898.      * @param int $cantidadPack2
  899.      *
  900.      * @return Producto
  901.      */
  902.     public function setCantidadPack2($cantidadPack2)
  903.     {
  904.         $this->cantidadPack2 $cantidadPack2;
  905.         return $this;
  906.     }
  907.     /**
  908.      * Get cantidadPack2.
  909.      *
  910.      * @return int
  911.      */
  912.     public function getCantidadPack2()
  913.     {
  914.         return $this->cantidadPack2;
  915.     }
  916.     /**
  917.      * Set packVisualizacion.
  918.      *
  919.      * @param int $packVisualizacion
  920.      *
  921.      * @return Producto
  922.      */
  923.     public function setPackVisualizacion($packVisualizacion)
  924.     {
  925.         $this->packVisualizacion $packVisualizacion;
  926.         return $this;
  927.     }
  928.     /**
  929.      * Get packVisualizacion.
  930.      *
  931.      * @return int
  932.      */
  933.     public function getPackVisualizacion()
  934.     {
  935.         return $this->packVisualizacion;
  936.     }
  937.     /**
  938.      * Set enOferta.
  939.      *
  940.      * @param bool $enOferta
  941.      *
  942.      * @return Producto
  943.      */
  944.     public function setEnOferta($enOferta)
  945.     {
  946.         $this->enOferta $enOferta;
  947.         return $this;
  948.     }
  949.     /**
  950.      * Get enOferta.
  951.      *
  952.      * @return bool
  953.      */
  954.     public function getEnOferta()
  955.     {
  956.         return $this->enOferta;
  957.     }
  958.     /**
  959.      * Set enStock.
  960.      *
  961.      * @param bool $enStock
  962.      *
  963.      * @return Producto
  964.      */
  965.     public function setEnStock($enStock)
  966.     {
  967.         $this->enStock $enStock;
  968.         return $this;
  969.     }
  970.     /**
  971.      * Get enStock.
  972.      *
  973.      * @return bool
  974.      */
  975.     public function getEnStock()
  976.     {
  977.         return $this->enStock;
  978.     }
  979.     /**
  980.      * Set tipoBoton.
  981.      *
  982.      * @param string $tipoBoton
  983.      *
  984.      * @return Producto
  985.      */
  986.     public function setTipoBoton($tipoBoton)
  987.     {
  988.         $this->tipoBoton $tipoBoton;
  989.         return $this;
  990.     }
  991.     /**
  992.      * Get tipoBoton.
  993.      *
  994.      * @return string
  995.      */
  996.     public function getTipoBoton()
  997.     {
  998.         return $this->tipoBoton;
  999.     }
  1000.     /**
  1001.      * * Devuelve el TipoBoton.
  1002.      * @return TipoBoton
  1003.      */
  1004.     public function getTipoBotonEntity(): TipoBoton
  1005.     {
  1006.         return TipoBoton::get($this->getTipoBoton());
  1007.     }
  1008.     /**
  1009.      * Set botonRecorte.
  1010.      *
  1011.      * @param string $botonRecorte
  1012.      *
  1013.      * @return Producto
  1014.      */
  1015.     public function setBotonRecorte($botonRecorte)
  1016.     {
  1017.         $this->botonRecorte $botonRecorte;
  1018.         return $this;
  1019.     }
  1020.     /**
  1021.      * Get botonRecorte.
  1022.      *
  1023.      * @return string
  1024.      */
  1025.     public function getBotonRecorte()
  1026.     {
  1027.         return $this->botonRecorte;
  1028.     }
  1029.     /**
  1030.      * Set botonAMedida.
  1031.      *
  1032.      * @param string $botonAMedida
  1033.      *
  1034.      * @return Producto
  1035.      */
  1036.     public function setBotonAMedida($botonAMedida)
  1037.     {
  1038.         $this->botonAMedida $botonAMedida;
  1039.         return $this;
  1040.     }
  1041.     /**
  1042.      * Get botonAMedida.
  1043.      *
  1044.      * @return string
  1045.      */
  1046.     public function getBotonAMedida()
  1047.     {
  1048.         return $this->botonAMedida;
  1049.     }
  1050.     /**
  1051.      * Set valorMinimoMedida.
  1052.      *
  1053.      * @param decimal $valorMinimoMediad
  1054.      *
  1055.      * @return Producto
  1056.      */
  1057.     public function setValorMinimoMedida($valorMinimoMedida)
  1058.     {
  1059.         $this->valorMinimoMedida $valorMinimoMedida;
  1060.         return $this;
  1061.     }
  1062.     /**
  1063.      * Get valorMinimoMedida.
  1064.      *
  1065.      * @return decimal
  1066.      */
  1067.     public function getValorMinimoMedida()
  1068.     {
  1069.         return $this->valorMinimoMedida;
  1070.     }
  1071.     /**
  1072.      * Set valorMaximoMedida.
  1073.      *
  1074.      * @param decimal $valorMaximoMedida
  1075.      *
  1076.      * @return Producto
  1077.      */
  1078.     public function setValorMaximoMedida($valorMaximoMedida)
  1079.     {
  1080.         $this->valorMaximoMedida $valorMaximoMedida;
  1081.         return $this;
  1082.     }
  1083.     /**
  1084.      * Get valorMaximoMedida.
  1085.      *
  1086.      * @return decimal
  1087.      */
  1088.     public function getValorMaximoMedida()
  1089.     {
  1090.         return $this->valorMaximoMedida;
  1091.     }
  1092.     /**
  1093.      * Set eliminado.
  1094.      *
  1095.      * @param bool $eliminado
  1096.      *
  1097.      * @return Producto
  1098.      */
  1099.     public function setEliminado($eliminado)
  1100.     {
  1101.         $this->eliminado $eliminado;
  1102.         return $this;
  1103.     }
  1104.     /**
  1105.      * Get eliminado.
  1106.      *
  1107.      * @return bool
  1108.      */
  1109.     public function getEliminado()
  1110.     {
  1111.         return $this->eliminado;
  1112.     }
  1113.     /**
  1114.      * Set largoStd1.
  1115.      *
  1116.      * @param string $largoStd1
  1117.      *
  1118.      * @return Producto
  1119.      */
  1120.     public function setLargoStd1($largoStd1)
  1121.     {
  1122.         $this->largoStd1 $largoStd1;
  1123.         return $this;
  1124.     }
  1125.     /**
  1126.      * Get largoStd1.
  1127.      *
  1128.      * @return string
  1129.      */
  1130.     public function getLargoStd1()
  1131.     {
  1132.         return $this->largoStd1;
  1133.     }
  1134.     /**
  1135.      * Set largoStd2.
  1136.      *
  1137.      * @param string $largoStd2
  1138.      *
  1139.      * @return Producto
  1140.      */
  1141.     public function setLargoStd2($largoStd2)
  1142.     {
  1143.         $this->largoStd2 $largoStd2;
  1144.         return $this;
  1145.     }
  1146.     /**
  1147.      * Get largoStd2.
  1148.      *
  1149.      * @return string
  1150.      */
  1151.     public function getLargoStd2()
  1152.     {
  1153.         return $this->largoStd2;
  1154.     }
  1155.     public function getEsMvse()
  1156.     {
  1157.         return $this->esMvse;
  1158.     }
  1159.     public function setEsMvse($esMvse)
  1160.     {
  1161.         $this->esMvse $esMvse;
  1162.         return $this;
  1163.     }
  1164.     /*  
  1165.         Esta función es utilizado para la migración a solr, 
  1166.         por alguna razón si se envía el valor false no carga el campo en solr
  1167.         por eso enviamos el valor entero y solr lo interpreta como bool 
  1168.      */
  1169.     public function getInoxsale()
  1170.     {
  1171.         return intval($this->inoxsale);
  1172.     }
  1173.     public function isInoxsale()
  1174.     {
  1175.         return $this->inoxsale == true;
  1176.     }
  1177.     public function setInoxsale($inoxsale)
  1178.     {
  1179.         $this->inoxsale $inoxsale;
  1180.         return $this;
  1181.     }
  1182.     
  1183.     public function getInmovilizado()
  1184.     {
  1185.         return intval($this->inmovilizado);
  1186.     }
  1187.     public function isInmovilizado()
  1188.     {
  1189.         return $this->inmovilizado;
  1190.     }
  1191.     public function setInmovilizado(bool $inmovilizado)
  1192.     {
  1193.         $this->inmovilizado $inmovilizado;
  1194.         return $this;
  1195.     }
  1196.     public function getBobina()
  1197.     {
  1198.         return intval($this->bobina);
  1199.     }
  1200.     public function isBobina()
  1201.     {
  1202.         return $this->bobina == true;
  1203.     }
  1204.     public function setBobina($Bobina)
  1205.     {
  1206.         $this->bobina $Bobina;
  1207.         return $this;
  1208.     }
  1209.     public function getLeyendaOpCompra()
  1210.     {
  1211.         return $this->leyendaOpCompra;
  1212.     }
  1213.     public function setLeyendaOpCompra($leyendaOpCompra)
  1214.     {
  1215.         $this->leyendaOpCompra $leyendaOpCompra;
  1216.         return $this;
  1217.     }
  1218.     public function getNoUruguay()
  1219.     {
  1220.         return $this->noUruguay;
  1221.     }
  1222.     public function setNoUruguay($noUruguay)
  1223.     {
  1224.         $this->noUruguay $noUruguay;
  1225.         return $this;
  1226.     }
  1227.     /**
  1228.      * Add caracteristicasValor.
  1229.      *
  1230.      * @param \AppBundle\Entity\CaracteristicaValor $caracteristicasValor
  1231.      *
  1232.      * @return Producto
  1233.      */
  1234.     public function addCaracteristicasValor(\AppBundle\Entity\CaracteristicaValor $caracteristicasValor)
  1235.     {
  1236.         $this->caracteristicasValor[] = $caracteristicasValor;
  1237.         return $this;
  1238.     }
  1239.     /**
  1240.      * Add materialesUnidadMedida.
  1241.      *
  1242.      * @param \AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida
  1243.      *
  1244.      * @return Producto
  1245.      */
  1246.     public function addMaterialesUnidadMedida(MaterialUnidadMedida $materialesUnidadMedida)
  1247.     {
  1248.         $this->materialesUnidadMedida[] = $materialesUnidadMedida;
  1249.         return $this;
  1250.     }
  1251.     /**
  1252.      * Remove materialesUnidadMedida.
  1253.      *
  1254.      * @param \AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida
  1255.      */
  1256.     public function removeMaterialesUnidadMedida(\AppBundle\Entity\MaterialUnidadMedida $materialesUnidadMedida)
  1257.     {
  1258.         $this->materialesUnidadMedida->removeElement($materialesUnidadMedida);
  1259.     }
  1260.     public function getPesoFacturacion()
  1261.     {
  1262.         foreach ($this->materialesUnidadMedida as $key => $materialUnidadMedida) {
  1263.             if ($materialUnidadMedida->getUnidadMedidaBase() === $this->unidadMedidaStock->getId() && $materialUnidadMedida->getUnidadMedidaDestino() === $this->unidadMedidaFacturacion->getId()) {
  1264.                 if ($this->tipoBoton == '5') {
  1265.                     $cantBase $this->largoStd1;
  1266.                 } else {
  1267.                     $cantBase 1;
  1268.                 }
  1269.                 return $materialUnidadMedida->calcularDestino($cantBase);
  1270.             }
  1271.         }
  1272.         return '';
  1273.     }
  1274.     public function pesoAMetros($peso)
  1275.     {
  1276.         foreach ($this->materialesUnidadMedida as $key => $materialUnidadMedida) {
  1277.             if ($materialUnidadMedida->getUnidadMedidaBase() === $this->unidadMedidaStock->getId() && $materialUnidadMedida->getUnidadMedidaDestino() === $this->unidadMedidaFacturacion->getId()) {
  1278.                 return $materialUnidadMedida->calcularBase($peso);
  1279.             }
  1280.         }
  1281.         return 0;
  1282.     }
  1283.     /**
  1284.      * Get caracteristicasValor.
  1285.      *
  1286.      * @return \Doctrine\Common\Collections\Collection
  1287.      */
  1288.     public function getCaracteristicasValorEnOrden()
  1289.     {
  1290.         $caracteristicas = [];
  1291.         
  1292.         foreach ($this->caracteristicasValor as $key => $caracteristicaValor) {
  1293.             if ($caracteristicaValor->getSlugEs() === 'no-aplica' || !$caracteristicaValor->getCaracteristica()->getFiltrableDesdeListado()) {
  1294.                 continue;    
  1295.             }
  1296.             
  1297.             $orden $caracteristicaValor->getCaracteristica()->getOrden();
  1298.             $caracteristicas[$orden] = [
  1299.                 'nombre' => $caracteristicaValor->getCaracteristica()->getNombreEs(),
  1300.                 'valor'  => $caracteristicaValor->getValorEs(),
  1301.             ];
  1302.         }
  1303.         ksort($caracteristicas);
  1304.         $cantCaracteristicas count($caracteristicas);
  1305.         if ($this->tipoBoton == or $this->tipoBoton == 5) {
  1306.             $caracteristicas[$cantCaracteristicas+1] = [
  1307.                 'nombre' => 'Peso Neto',
  1308.                 'valor' => $this->pesoNeto,
  1309.             ];
  1310.             $caracteristicas[$cantCaracteristicas+2] = [
  1311.                 'nombre' => 'Peso Bruto',
  1312.                 'valor' => $this->pesoBruto,
  1313.             ];
  1314.         }
  1315.         return $caracteristicas;
  1316.     }
  1317.     /**
  1318.      * Set promVentas.
  1319.      *
  1320.      * @param float $promVentas
  1321.      *
  1322.      * @return Producto
  1323.      */
  1324.     public function setPromVentas($promVentas)
  1325.     {
  1326.         $this->promVentas $promVentas;
  1327.         return $this;
  1328.     }
  1329.     /**
  1330.      * Get promVentas.
  1331.      *
  1332.      * @return float
  1333.      */
  1334.     public function getPromVentas()
  1335.     {
  1336.         return $this->promVentas;
  1337.     }
  1338.     /**
  1339.      * Set promVentas.
  1340.      *
  1341.      * @param float $promVentasOld
  1342.      *
  1343.      * @return Producto
  1344.      */
  1345.     public function setPromVentasOld($promVentasOld)
  1346.     {
  1347.         $this->promVentasOld $promVentasOld;
  1348.         return $this;
  1349.     }
  1350.     /**
  1351.      * Get promVentasOld.
  1352.      *
  1353.      * @return float
  1354.      */
  1355.     public function getPromVentasOld()
  1356.     {
  1357.         return $this->promVentasOld;
  1358.     }
  1359.     /**
  1360.      * Set minimoVentaGeneral.
  1361.      *
  1362.      * @param float $minimoVentaGeneral
  1363.      *
  1364.      * @return Producto
  1365.      */
  1366.     public function setMinimoVentaGeneral($minimoVentaGeneral)
  1367.     {
  1368.         $this->minimoVentaGeneral $minimoVentaGeneral;
  1369.         return $this;
  1370.     }
  1371.     /**
  1372.      * Get minimoVentaGeneral.
  1373.      *
  1374.      * @return float
  1375.      */
  1376.     public function getMinimoVentaGeneral()
  1377.     {
  1378.         return $this->minimoVentaGeneral;
  1379.     }
  1380.     /**
  1381.      * Set setCortePrecision.
  1382.      *
  1383.      * @param string $setCortePrecision
  1384.      *
  1385.      * @return Producto
  1386.      */
  1387.     public function setCortePrecision($cortePrecision)
  1388.     {
  1389.         $this->cortePrecision $cortePrecision;
  1390.         return $this;
  1391.     }
  1392.     /**
  1393.      * Get CortePrecision.
  1394.      *
  1395.      * @return bool
  1396.      */
  1397.     public function getCortePrecision()
  1398.     {
  1399.         return $this->cortePrecision;
  1400.     }
  1401.     /**
  1402.      * Set dataMV.
  1403.      *
  1404.      * @param string $dataMV
  1405.      *
  1406.      * @return Producto
  1407.      */
  1408.     public function setDataMV($dataMV)
  1409.     {
  1410.         $this->dataMV $dataMV;
  1411.         return $this;
  1412.     }
  1413.     /**
  1414.      * Get dataMV.
  1415.      *
  1416.      * @return array
  1417.      */
  1418.     public function getDataMV()
  1419.     {
  1420.         $dataMV = !empty($this->dataMV) ? json_decode($this->dataMVtrue512JSON_BIGINT_AS_STRING) : null;
  1421.         if (is_array($dataMV)) {
  1422.             return $dataMV;
  1423.         }
  1424.         return;
  1425.     }
  1426.     /**
  1427.      * Add itemsCarrito.
  1428.      *
  1429.      * @param \AppBundle\Entity\ItemCarrito $itemsCarrito
  1430.      *
  1431.      * @return Producto
  1432.      */
  1433.     public function addItemsCarrito(\AppBundle\Entity\ItemCarrito $itemsCarrito)
  1434.     {
  1435.         $this->itemsCarrito[] = $itemsCarrito;
  1436.         return $this;
  1437.     }
  1438.     /**
  1439.      * Remove itemsCarrito.
  1440.      *
  1441.      * @param \AppBundle\Entity\ItemCarrito $itemsCarrito
  1442.      */
  1443.     public function removeItemsCarrito(\AppBundle\Entity\ItemCarrito $itemsCarrito)
  1444.     {
  1445.         $this->itemsCarrito->removeElement($itemsCarrito);
  1446.     }
  1447.     /**
  1448.      * Get itemsCarrito.
  1449.      *
  1450.      * @return \Doctrine\Common\Collections\Collection
  1451.      */
  1452.     public function getItemsCarrito()
  1453.     {
  1454.         return $this->itemsCarrito;
  1455.     }
  1456.     /**
  1457.      * Determina si un producto es activable. El mismo debe estar en catálogo y no ser de tipo bobina 
  1458.      * para ser un producto activo.
  1459.      * 
  1460.      * @return boolean
  1461.      */
  1462.     public function isActivable($tipoBoton$estaCatalogo) {
  1463.         if ($tipoBoton !== self::TIPO_BOTON_BOBINA && $estaCatalogo) {
  1464.             return true;
  1465.         }
  1466.         return false;
  1467.     }
  1468.     public function getUrlDetalle() 
  1469.     {
  1470.         return '/producto/' $this->getId() . '-' $this->getSlugEs();
  1471.     }
  1472.     public function getMetaDescription()
  1473.     {
  1474.         $metaDesc substr($this->getSubfamilia()->getTextoExtEs(), 0200);
  1475.         if (($length strlen($this->getBusquedaEs())) > 100) {
  1476.             $keywords substr($this->getBusquedaEs(), $length 99$length);
  1477.         } else {
  1478.             $keywords $this->getBusquedaEs();
  1479.         }
  1480.         return $metaDesc ' ' strtolower($keywords);
  1481.     }
  1482.     /**
  1483.      * get StockEnSucursales.
  1484.      *
  1485.      * @return string
  1486.      */
  1487.     public function getStockEnSucursales(){
  1488.         return $this->stockEnSucursales;
  1489.     }
  1490.     /**
  1491.      * Set stockEnSucursales.
  1492.      *
  1493.      * @param string $stockEnSucursales
  1494.      *
  1495.      * @return Producto
  1496.      */
  1497.     public function setStockEnSucursales($stockEnSucursales){
  1498.         $this->stockEnSucursales $stockEnSucursales;
  1499.         return $this;
  1500.     }
  1501.     public function estaSincronizado(){
  1502.         return $this->fechaActualizacion $this->fechaUpdateSolr;
  1503.     }
  1504.     /**
  1505.      * Set grupoMultimedia
  1506.      *
  1507.      * @param \AppBundle\Entity\GrupoMultimedia $grupoMultimedia
  1508.      *
  1509.      * @return Producto
  1510.      */
  1511.     public function setGrupoMultimedia(\AppBundle\Entity\GrupoMultimedia $grupoMultimedia null)
  1512.     {
  1513.         $this->grupoMultimedia $grupoMultimedia;
  1514.         return $this;
  1515.     }
  1516.     /**
  1517.      * Get grupoMultimedia
  1518.      *
  1519.      * @return \AppBundle\Entity\GrupoMultimedia
  1520.      */
  1521.     public function getGrupoMultimedia()
  1522.     {
  1523.         return $this->grupoMultimedia;
  1524.     }
  1525.     /**
  1526.      * Retorna un array con las imagenes de la entidad padre
  1527.      *
  1528.      * @return array
  1529.      */
  1530.     public function getImagenes() 
  1531.     {
  1532.         $grupoMulti $this->getGrupoMultimedia();
  1533.         if ($grupoMulti && count($grupoMulti->getImagenes())) {
  1534.             return $grupoMulti->getImagenes();
  1535.         }
  1536.         $subFamilia $this->getSubFamilia();
  1537.         if ($subFamilia && count($subFamilia->getImagenes())) {
  1538.             return $subFamilia->getImagenes();
  1539.         }
  1540.         return [];
  1541.     }
  1542.     /**
  1543.      * * Devuelve un array con las imagenes de la Entidad.
  1544.      * @return array
  1545.      */
  1546.     public function getImagenesConExtension(): array
  1547.     {
  1548.         $imagenes $this->getImagenes();
  1549.         if (empty($imagenes)) {
  1550.             return $imagenes;
  1551.         }
  1552.         $collection = [
  1553.             // 
  1554.         ];
  1555.         foreach ($imagenes as $image) {
  1556.             $collection[] = pathinfo($imagePATHINFO_FILENAME) . '.' strtolower(pathinfo($imagePATHINFO_EXTENSION));
  1557.         }
  1558.         return $collection;
  1559.     }
  1560.     public function getImagenPrincipal()
  1561.     {
  1562.         $imagenes $this->getImagenes();
  1563.         if (count($imagenes)) {
  1564.             return $imagenes[0];            
  1565.         }
  1566.         return '';
  1567.     }
  1568.     /**
  1569.      * Retorna la entidad padre del material
  1570.      *
  1571.      * @return GrupoMultimedia|SubFamilia|null
  1572.      */
  1573.     public function getParent() 
  1574.     {
  1575.         if ($grupoMulti $this->getGrupoMultimedia()) {
  1576.             return $grupoMulti;
  1577.         }
  1578.         if ($subFamilia $this->getSubFamilia()) {
  1579.             return $subFamilia;
  1580.         }
  1581.         return null;
  1582.     }
  1583.     /**
  1584.      * Retorna un string con el nombre del archivo
  1585.      *
  1586.      * @return string|null
  1587.      */
  1588.     public function getFicha() 
  1589.     {
  1590.         $grupoMulti $this->getGrupoMultimedia();
  1591.         if ($grupoMulti && $grupoMulti->getFicha() !== '') {
  1592.             return $grupoMulti->getFicha();
  1593.         }
  1594.         $subFamilia $this->getSubFamilia();
  1595.         
  1596.         return ($subFamilia && !empty($subFamilia->getFicha())) ? 
  1597.             $subFamilia->getFicha() : null;
  1598.     }
  1599.     /**
  1600.      * Retorna un string con el id de video
  1601.      *
  1602.      * @return string|null
  1603.      */
  1604.     public function getVideo() 
  1605.     {
  1606.         $grupoMulti $this->getGrupoMultimedia();
  1607.         if ($grupoMulti && $grupoMulti->getVideo() !== '') {
  1608.             return $grupoMulti->getVideo();
  1609.         }
  1610.         $subFamilia $this->getSubFamilia();
  1611.         
  1612.         return ($subFamilia && !empty($subFamilia->getVideo())) ? 
  1613.             $subFamilia->getVideo() : null;
  1614.     }
  1615.     /**
  1616.      * Retorna un string con el nombre del archivo
  1617.      *
  1618.      * @return string|null
  1619.      */
  1620.     public function getPlano() 
  1621.     {
  1622.         $grupoMulti $this->getGrupoMultimedia();
  1623.         if ($grupoMulti && $grupoMulti->getPlano() !== '') {
  1624.             return $grupoMulti->getPlano();
  1625.         }
  1626.         $subFamilia $this->getSubFamilia();
  1627.         
  1628.         return ($subFamilia && !empty($subFamilia->getPlano())) ? 
  1629.             $subFamilia->getPlano() : null;
  1630.     }
  1631.     /**
  1632.      * Retorna un string con el nombre del archivo
  1633.      *
  1634.      * @return string|null
  1635.      */
  1636.     public function getFolleto() 
  1637.     {
  1638.         if(!empty($this->getSubFamilia()->getFamilia()->getCategorias()[0]))
  1639.         {
  1640.         $categoria $this->getSubFamilia()->getFamilia()->getCategorias()[0];
  1641.         return $categoria->getFolleto();
  1642.         }
  1643.         
  1644.         return null;
  1645.     }
  1646.     public function getTextoExtEs()
  1647.     {
  1648.         $grupoMulti $this->getGrupoMultimedia();
  1649.         if ($grupoMulti && $grupoMulti->getTextoExtEs() !== '') {
  1650.             return $grupoMulti->getTextoExtEs();
  1651.         }
  1652.         $subFamilia $this->getSubFamilia();
  1653.         
  1654.         return ($subFamilia && !empty($subFamilia->getTextoExtEs())) ? 
  1655.             $subFamilia->getTextoExtEs() : '';
  1656.     }
  1657.     public function getParentNombreEs() 
  1658.     {
  1659.         $grupoMulti $this->getGrupoMultimedia();
  1660.         if ($grupoMulti && $grupoMulti->getNombreEs() !== '') {
  1661.             return $grupoMulti->getNombreEs();
  1662.         }
  1663.         $subFamilia $this->getSubFamilia();
  1664.         
  1665.         return ($subFamilia && !empty($subFamilia->getNombreEs())) ? 
  1666.             $subFamilia->getNombreEs() : '';
  1667.     }
  1668.     public function getValorDeCaracteristica($slugCaracteristica){
  1669.         foreach ($this->caracteristicasValor as $key => $value) {
  1670.             if($value->getCaracteristica()->getSlugEs() == $slugCaracteristica){
  1671.                 return $value->getValorEs();
  1672.             }
  1673.         }                            
  1674.         return false;
  1675.     }
  1676.     public function getValorDeCaracteristicaSlug($slugCaracteristica){
  1677.         foreach ($this->caracteristicasValor as $key => $value) {
  1678.             if($value->getCaracteristica()->getSlugEs() == $slugCaracteristica){
  1679.                 return $value->getSlugEs();
  1680.             }
  1681.         }                            
  1682.         return false;
  1683.     }
  1684.     /**
  1685.      * Get the value of abc
  1686.      */ 
  1687.     public function getAbc()
  1688.     {
  1689.         return $this->abc;
  1690.     }
  1691.     /**
  1692.      * Set the value of abc
  1693.      *
  1694.      * @return  self
  1695.      */ 
  1696.     public function setAbc($abc)
  1697.     {
  1698.         $this->abc $abc;
  1699.         return $this;
  1700.     }
  1701.     /**
  1702.      * Get the value of abcPin
  1703.      */ 
  1704.     public function getAbcPin()
  1705.     {
  1706.         return $this->abcPin;
  1707.     }
  1708.     /**
  1709.      * Set the value of abcPin
  1710.      *
  1711.      * @return  self
  1712.      */ 
  1713.     public function setAbcPin($abcPin)
  1714.     {
  1715.         $this->abcPin $abcPin;
  1716.         return $this;
  1717.     }
  1718.     /**
  1719.      * Get the value of textoBreve
  1720.      */ 
  1721.     public function getTextoBreve()
  1722.     {
  1723.         return $this->textoBreve;
  1724.     }
  1725.     /**
  1726.      * Set the value of textoBreve
  1727.      *
  1728.      * @return  self
  1729.      */ 
  1730.     public function setTextoBreve($textoBreve)
  1731.     {
  1732.         $this->textoBreve $textoBreve;
  1733.         return $this;
  1734.     }
  1735.     /**
  1736.      * Get the value of indicadorAbc
  1737.      */ 
  1738.     public function getIndicadorAbc()
  1739.     {
  1740.         return $this->indicadorAbc;
  1741.     }
  1742.     /**
  1743.      * Set the value of indicadorAbc
  1744.      *
  1745.      * @return  self
  1746.      */ 
  1747.     public function setIndicadorAbc($indicadorAbc)
  1748.     {
  1749.         $this->indicadorAbc $indicadorAbc;
  1750.         if(in_array($indicadorAbc,self::ABC))
  1751.         {
  1752.             $this->abc self::ABC[$indicadorAbc];
  1753.         }
  1754.         return $this;
  1755.     }
  1756.     /**
  1757.      * Get the value of indicadorAbcPin
  1758.      */ 
  1759.     public function getIndicadorAbcPin()
  1760.     {
  1761.         return $this->indicadorAbcPin;
  1762.     }
  1763.     /**
  1764.      * Set the value of indicadorAbcPin
  1765.      *
  1766.      * @return  self
  1767.      */ 
  1768.     public function setIndicadorAbcPin($indicadorAbcPin)
  1769.     {
  1770.         $this->indicadorAbcPin $indicadorAbcPin;
  1771.         if(in_array($indicadorAbcPin,array_keys(self::ABC)))
  1772.         {
  1773.             $this->abcPin self::ABC[$indicadorAbcPin];
  1774.         }
  1775.         return $this;
  1776.     }
  1777.     /**
  1778.      * Get etiquetas.
  1779.      *
  1780.      * @return \Doctrine\Common\Collections\Collection
  1781.      */
  1782.     public function getEtiquetas()
  1783.     {
  1784.         return $this->etiquetas;
  1785.     }
  1786.     /**
  1787.      * Add Etiqueta.
  1788.      *
  1789.      * @param Etiqueta $etiqueta
  1790.      *
  1791.      * @return Producto
  1792.      */
  1793.     public function addEtiqueta(Etiqueta $etiqueta)
  1794.     {
  1795.         $this->etiquetas[] = $etiqueta;
  1796.         return $this;
  1797.     }
  1798.     /**
  1799.      * Get the value of grupoDeMaterial
  1800.      */
  1801.     public function getGrupoDeMaterial(): string
  1802.     {
  1803.         return $this->grupoDeMaterial ?? "";
  1804.     }
  1805.     /**
  1806.      * Set the value of grupoDeMaterial
  1807.      */
  1808.     public function setGrupoDeMaterial(string $grupoDeMaterial): self
  1809.     {
  1810.         $this->grupoDeMaterial $grupoDeMaterial;
  1811.         return $this;
  1812.     }
  1813.     /**
  1814.      * Get the value of cliente
  1815.      *
  1816.      * @return  string
  1817.      */ 
  1818.     public function getCliente()
  1819.     {
  1820.         return $this->cliente ?? 0;
  1821.     }
  1822.     /**
  1823.      * Set the value of cliente
  1824.      *
  1825.      * @param  string  $cliente
  1826.      *
  1827.      * @return  self
  1828.      */ 
  1829.     public function setCliente(string $cliente)
  1830.     {
  1831.         $this->cliente $cliente ?? 0;
  1832.         return $this;
  1833.     }
  1834.     /**
  1835.      * * Devuelve las presentaciones.
  1836.      * @return array
  1837.      */
  1838.     public function getPresentaciones(): array
  1839.     {
  1840.         $collection = [
  1841.             // 
  1842.         ];
  1843.         switch ($this->getTipoBoton()) {
  1844.             case TipoBoton::OPCIONES['accesorio']['id']:
  1845.                 $collection $this->getPresentacionesAccesorio();
  1846.                 break;
  1847.             case TipoBoton::OPCIONES['barra']['id']:
  1848.                 $collection $this->getPresentacionesBarra();
  1849.                 break;
  1850.             case TipoBoton::OPCIONES['caño']['id']:
  1851.                 $collection $this->getPresentacionesTubo();
  1852.                 break;
  1853.             case TipoBoton::OPCIONES['chapa']['id']:
  1854.                 $collection $this->getPresentacionesChapa();
  1855.                 break;
  1856.             case TipoBoton::OPCIONES['pack']['id']:
  1857.                 $collection $this->getPresentacionesPack();
  1858.                 break;
  1859.         }
  1860.         if (count($collection)) {
  1861.             $collection[0]->setChecked(true);
  1862.         }
  1863.         return $collection;
  1864.     }
  1865.     /**
  1866.      * * De vuelve las presentaciones del tipo boton "accesorio".
  1867.      * @return array
  1868.      */
  1869.     public function getPresentacionesAccesorio(): array
  1870.     {
  1871.         $collection = [
  1872.             // 
  1873.         ];
  1874.         $unidad $this->getUnidadMedidaFacturacion()
  1875.             ->getId();
  1876.         $precios $this->getPrecios();
  1877.         $precioLabel intval(($precios['PrecioBase'] * 100)) / 100;
  1878.         if ($this->getMinimoVentaGeneral() > && $this->getMinimoVentaGeneral() != && $this->getMinimoVentaGeneral() != 10) {
  1879.             $precioLabel intval(($precios['PrecioBase'] * 100)) / 100 $this->getMinimoVentaGeneral();
  1880.         } else {
  1881.             $precioLabel intval(($precios['PrecioBase'] * 100)) / 100;
  1882.         }
  1883.         switch ($unidad) {
  1884.             case 'KG':
  1885.                 $presentacion = (Presentacion::bySlug('kilo'))
  1886.                     ->setDescuento($precios["descuentoPorcentaje"] ?? 0)
  1887.                     ->setMoneda($precios["Konwa"])
  1888.                     ->setName($this->getLargoStd1() . " kilogramos")
  1889.                     ->setPrecio($precioLabel)
  1890.                     ->setUnidad($unidad);
  1891.                 $presentacion->getCantidad()
  1892.                     ->setCode($this->getLargo()['minimo'])
  1893.                     ->setMax($this->getLargo()['maximo'])
  1894.                     ->setMin($this->getLargo()['minimo'])
  1895.                     ->setStep($this->getLargo()['paso']);
  1896.                 $collection[] = $presentacion;
  1897.                 break;
  1898.             case 'M':
  1899.                 $presentacion = (Presentacion::bySlug('metro'))
  1900.                     ->setDescuento($precios["descuentoPorcentaje"] ?? 0)
  1901.                     ->setMoneda($precios["Konwa"])
  1902.                     ->setPrecio($precioLabel)
  1903.                     ->setUnidad($unidad);
  1904.                 $presentacion->getCantidad()
  1905.                     ->setCode($this->getLargo()['minimo'])
  1906.                     ->setMax($this->getLargo()['maximo'])
  1907.                     ->setMin($this->getLargo()['minimo'])
  1908.                     ->setStep($this->getLargo()['paso']);
  1909.                 $collection[] = $presentacion;
  1910.                 break;
  1911.             case 'ST':
  1912.                 $collection[] = (Presentacion::bySlug('unidad'))
  1913.                     ->setDescuento($precios["descuentoPorcentaje"] ?? 0)
  1914.                     ->setMoneda($precios["Konwa"])
  1915.                     ->setPrecio($precioLabel)
  1916.                     ->setUnidad('UN');
  1917.                 break;
  1918.             default:
  1919.                 $collection[] = (Presentacion::bySlug('unidad'))
  1920.                     ->setDescuento($precios["descuentoPorcentaje"] ?? 0)
  1921.                     ->setMoneda($precios["Konwa"])
  1922.                     ->setPrecio($precioLabel)
  1923.                     ->setUnidad($unidad);
  1924.                 break;
  1925.         }
  1926.         return $collection;
  1927.     }
  1928.     /**
  1929.      * * De vuelve las presentaciones del tipo boton "barra".
  1930.      * @return array
  1931.      */
  1932.     public function getPresentacionesBarra(): array
  1933.     {
  1934.         $collection = [
  1935.             // 
  1936.         ];
  1937.         $unidad $this->getUnidadMedidaFacturacion()
  1938.             ->getId();
  1939.         $precios $this->getPrecios();
  1940.         $presentacion = (Presentacion::bySlug('tira'))
  1941.             ->setMoneda($precios["Konwa"])
  1942.             ->setName($this->getLargoStd1() . " metros")
  1943.             ->setPrecio($precios['PrecioBase'])
  1944.             ->setUnidad($unidad);
  1945.         $presentacion->getCantidad()
  1946.             ->setCode($this->getLargoStd1())
  1947.             ->setMin($this->getLargoStd1())
  1948.             ->setStep($this->getLargoStd1());
  1949.         $collection[] = $presentacion;
  1950.         if (isset($precios['PrecioMedida']) && isset($precios['PrecioCorte']) && $this->getBotonAMedida()) {
  1951.             $collection[] = (Presentacion::bySlug('a-medida'))
  1952.                 ->setMoneda($precios['Konwa'])
  1953.                 ->setPrecio($precios["PrecioMedida"])
  1954.                 ->setUnidad($unidad);
  1955.         }
  1956.         $conRecortes $this->getRecortes();
  1957.         if (isset($precios['PrecioRecorte']) && $conRecortes && count($conRecortes)) {
  1958.             $collection[] = (Presentacion::bySlug('recortes'))
  1959.                 ->setMoneda($precios['Konwa'])
  1960.                 ->setUnidad($unidad);
  1961.         }
  1962.         return $collection;
  1963.     }
  1964.     /**
  1965.      * * De vuelve las presentaciones del tipo boton "chapa".
  1966.      * @return array
  1967.      */
  1968.     public function getPresentacionesChapa(): array
  1969.     {
  1970.         $collection = [
  1971.             // 
  1972.         ];
  1973.         $unidad $this->getUnidadMedidaFacturacion()
  1974.             ->getId();
  1975.         $precios $this->getPrecios();
  1976.         $lotes $this->getLotes();
  1977.         if (!empty($lotes)) {
  1978.             $collection[] = (Presentacion::bySlug('cajon-cerrado'))
  1979.                 ->setDescuento(abs($precios["DescLote"]))
  1980.                 ->setUnidad($unidad);
  1981.         }
  1982.         // $bobinas = $this->getBobinas();
  1983.         // if (!empty($bobinas)) {
  1984.         //     $collection[] = (Presentacion::bySlug('bobinas'))
  1985.         //         ->setUnidad($unidad);
  1986.         // }
  1987.         if (!$this->isBobina()) {
  1988.             $collection[] = (Presentacion::bySlug('unidad'))
  1989.                 ->setDescuento($precios["descuentoPorcentaje"] ?? 0)
  1990.                 ->setMoneda($precios["Konwa"])
  1991.                 ->setPrecio($precios['PrecioBase'])
  1992.                 ->setUnidad($unidad);
  1993.         }
  1994.         if ($this->getBotonAMedida()) {
  1995.             $collection[] = (Presentacion::bySlug('a-medida'))
  1996.                 ->setLargo(floatval($this->getValorDeCaracteristica('largo')) / 1000)
  1997.                 ->setMoneda($precios["Konwa"])
  1998.                 ->setPrecio($precios['PrecioMedida'])
  1999.                 ->setUnidad($unidad);
  2000.         }
  2001.         return $collection;
  2002.     }
  2003.     /**
  2004.      * * De vuelve las presentaciones del tipo boton "pack".
  2005.      * @return array
  2006.      */
  2007.     public function getPresentacionesPack(): array
  2008.     {
  2009.         $collection = [
  2010.             // 
  2011.         ];
  2012.         $precios $this->getPrecios();
  2013.         $cantidadPack1 $this->getCantidadPack1();
  2014.         $cantidadPack2 $this->getCantidadPack2();
  2015.         $collectionPack = [
  2016.             // 
  2017.         ];
  2018.         if (isset($precios['Pack1Kbetr']) && $precios['Pack1Kbetr'] > 0) {
  2019.             $collectionPack[] = (Presentacion::bySlug('pack-1'))
  2020.                 ->setMoneda($precios["Konwa"])
  2021.                 ->setName("$cantidadPack1 unidades")
  2022.                 ->setPrecio($precios['Pack1Kbetr'] * $cantidadPack1)
  2023.                 ->setUnidad("PACK");
  2024.         }
  2025.         if (isset($precios['Pack2Kbetr']) && $precios['Pack2Kbetr'] > 0) {
  2026.             $collectionPack[] = (Presentacion::bySlug('pack-2'))
  2027.                 ->setMoneda($precios["Konwa"])
  2028.                 ->setName("$cantidadPack2 unidades")
  2029.                 ->setPrecio($precios['Pack2Kbetr'] * $cantidadPack2)
  2030.                 ->setUnidad("PACK");
  2031.         }
  2032.         if ($cantidadPack1 != && $cantidadPack2 != && $this->getPackVisualizacion() < 4) {
  2033.             $collectionPack[] = (Presentacion::bySlug('suelto'))
  2034.                 ->setMoneda($precios["Konwa"])
  2035.                 ->setPrecio($precios['PrecioBase'])
  2036.                 ->setUnidad("UN");
  2037.         }
  2038.         if ($this->getPackVisualizacion() % == '1' && $cantidadPack1 0) {
  2039.             $collectionPrincipal array_splice($collectionPack01);
  2040.         } else if ($this->getPackVisualizacion() % == '2' && $cantidadPack2 || $cantidadPack2 && $cantidadPack1 === 0) {
  2041.             $collectionPrincipal array_splice($collectionPack11);
  2042.         } else {
  2043.             $collectionPrincipal array_splice($collectionPack21);
  2044.         }
  2045.         $collection array_merge($collectionPrincipal$collectionPack);
  2046.         return $collection;
  2047.     }
  2048.     /**
  2049.      * * De vuelve las presentaciones del tipo boton "tubo".
  2050.      * @return array
  2051.      */
  2052.     public function getPresentacionesTubo(): array
  2053.     {   
  2054.         $collection = [
  2055.             // 
  2056.         ];
  2057.         $unidad $this->getUnidadMedidaFacturacion()
  2058.             ->getId();
  2059.         $precios $this->getPrecios();
  2060.         $presentacion = (Presentacion::bySlug('tira'))
  2061.             ->setMoneda($precios["Konwa"])
  2062.             ->setName($this->getLargoStd1() . " metros")
  2063.             ->setPrecio($precios['PrecioBase'])
  2064.             ->setUnidad($unidad);
  2065.         $presentacion->getCantidad()
  2066.             ->setCode($this->getLargoStd1())
  2067.             ->setMin($this->getLargoStd1())
  2068.             ->setStep($this->getLargoStd1());
  2069.         $collection[] = $presentacion;
  2070.         if (isset($precios['PrecioBase2']) && floatval($this->getLargoStd2()) > && floatval($this->getLargoStd2()) != floatval($this->getLargoStd1())) {
  2071.             $presentacion = (Presentacion::bySlug('tira2'))
  2072.                 ->setMoneda($precios["Konwa"])
  2073.                 ->setName($this->getLargoStd2() . " metros")
  2074.                 ->setPrecio($precios['PrecioBase2'])
  2075.                 ->setUnidad($unidad);
  2076.             $presentacion->getCantidad()
  2077.                 ->setCode($this->getLargoStd2())
  2078.                 ->setMin($this->getLargoStd2())
  2079.                 ->setStep($this->getLargoStd2());
  2080.             $collection[] = $presentacion;
  2081.         }
  2082.         if (isset($precios['PrecioMedida']) && isset($precios['PrecioCorte']) && $this->getBotonAMedida()) {
  2083.             $collection[] = (Presentacion::bySlug('corte-medida'))
  2084.                 ->setMoneda($precios["Konwa"])
  2085.                 ->setPrecio($precios['PrecioMedida'])
  2086.                 ->setUnidad($unidad);
  2087.         }
  2088.         $conRecortes $this->getRecortes();
  2089.         if (!empty($conRecortes)) {
  2090.             $collection[] = (Presentacion::bySlug('recortes-2'))
  2091.                 ->setMoneda($precios["Konwa"])
  2092.                 ->setUnidad($unidad);
  2093.         }
  2094.         return $collection;
  2095.     }
  2096.     /**
  2097.      * * Devuelve las precios.
  2098.      * @return array|null
  2099.      */
  2100.     public function getPrecios(): array|null
  2101.     {
  2102.         return $this->precios;
  2103.     }
  2104.     /**
  2105.      * * Guarda las precios.
  2106.      * @param array|null $precios
  2107.      * @return self
  2108.      */
  2109.     public function setPrecios(array|null $precios): self
  2110.     {
  2111.         $this->precios $precios;
  2112.         return $this;
  2113.     }
  2114.     /**
  2115.      * * Devuelve los recortes.
  2116.      * @return array
  2117.      */
  2118.     public function getRecortes(): array
  2119.     {
  2120.         $collection = [
  2121.             // 
  2122.         ];
  2123.         if ($this->recortes) {
  2124.             foreach ($this->recortes as $array) {
  2125.                 if (isset($array['precioxtira'])) {
  2126.                     $presentacion = new Recorte($array);
  2127.                     if (!$array['inoxsale']) {
  2128.                         $presentacion->setDescuento(0);
  2129.                     }
  2130.                     $collection[] = $presentacion;
  2131.                 }
  2132.             }
  2133.         }
  2134.         return $collection;
  2135.     }
  2136.     /**
  2137.      * * Guarda los recortes.
  2138.      * @param array|null $recortes
  2139.      * @return self
  2140.      */
  2141.     public function setRecortes(array|null $recortes): self
  2142.     {
  2143.         $this->recortes $recortes;
  2144.         return $this;
  2145.     }
  2146.     /**
  2147.      * * Devuelve el TipoMVKO.
  2148.      * @return TipoMVKO|null
  2149.      */
  2150.     public function getTipoMVKO(): TipoMVKO|null
  2151.     {
  2152.         return TipoMVKO::bySubfamilia($this->getSubFamilia()->getId());
  2153.     }
  2154.     /**
  2155.      * * Devuelve el valor de cada paso que puede dar el input largo.
  2156.      * @return float
  2157.      */
  2158.     public function getValorPaso()
  2159.     {
  2160.         switch ($this->getTipoBoton()) {
  2161.             case TipoBoton::OPCIONES['accesorio']['id']:
  2162.                 return 1;
  2163.             case TipoBoton::OPCIONES['barra']['id']:
  2164.             case TipoBoton::OPCIONES['caño']['id']:
  2165.                 return 0.01;
  2166.             case TipoBoton::OPCIONES['chapa']['id']:
  2167.                 return 0.5;
  2168.             default:
  2169.                 return 0.05;
  2170.         }
  2171.     }
  2172.     /**
  2173.      * * Devuelve los viniles.
  2174.      * @return array
  2175.      */
  2176.     public function getViniles(): array
  2177.     {
  2178.         $collection = [
  2179.             // 
  2180.         ];
  2181.         if ($this->viniles) {
  2182.             foreach ($this->viniles as $array) {
  2183.                 $vinil Vinil::get($array['tipo']);
  2184.                 if (isset($array['selected']) && $array['selected']) {
  2185.                     $vinil->setSelected(true);
  2186.                 }
  2187.                 $collection[] = $vinil;
  2188.             }
  2189.         }
  2190.         return $collection;
  2191.     }
  2192.     /**
  2193.      * * Guarda los viniles.
  2194.      * @param array|null $viniles
  2195.      * @return self
  2196.      */
  2197.     public function setViniles(array|null $viniles): self
  2198.     {
  2199.         $this->viniles $viniles;
  2200.         return $this;
  2201.     }
  2202.     /**
  2203.      * * Devuelve el breadcrumb.
  2204.      * @return array
  2205.      */
  2206.     public function getBreadcrumb(): array
  2207.     {
  2208.         $breadcrumb = [
  2209.             // 
  2210.         ];
  2211.         $breadcrumb[] = [
  2212.             'texto' =>  "Todos los materiales",
  2213.             'enlace' =>  "/producto/?nombreEs=*",
  2214.         ];
  2215.         if ($this->getSubFamilia()) {
  2216.             $subFamilia $this->getSubFamilia()->getSlugEs();
  2217.             $breadcrumb[] = [
  2218.                 'texto' => $this->getSubFamilia()->getNombreEs(),
  2219.                 'enlace' =>  "/producto/?sub-familia=$subFamilia",
  2220.             ];
  2221.         }
  2222.         
  2223.         if ($this->getNombreEs()) {
  2224.             $breadcrumb[] = [
  2225.                 'texto' =>  $this->getNombreEs(),
  2226.                 'enlace' =>  '',
  2227.             ]; 
  2228.         }
  2229.         return $breadcrumb;
  2230.     }
  2231.     /**
  2232.      * * Devuelve los cortes.
  2233.      * @return array
  2234.      */
  2235.     public function getCortes(): array
  2236.     {
  2237.         $cortes Corte::byTipoBoton($this->getTipoBoton());
  2238.         foreach ($cortes as $corte) {
  2239.             if ($this->getTipoBoton() == TipoBoton::OPCIONES['barra']['id']) {
  2240.                 switch ($this->getCortePrecision()) {
  2241.                     case Corte::ES_OBLIGATORIO:
  2242.                         switch ($corte->getId()) {
  2243.                             case Corte::OPCIONES['estandar']['id']:
  2244.                                 $corte->setDisabled(true);
  2245.                                 $corte->setTolerancia($this->getValorMinimoMedida());
  2246.                                 break;
  2247.                             case Corte::OPCIONES['precision']['id']:
  2248.                                 $corte->setChecked(true);
  2249.                                 break;
  2250.                         }
  2251.                         break;
  2252.                     case Corte::ES_OPCIONAL:
  2253.                         switch ($corte->getId()) {
  2254.                             case Corte::OPCIONES['estandar']['id']:
  2255.                                 if ($this->getValorMinimoMedida() < 0.1) {
  2256.                                     $corte->setDisabled(true);
  2257.                                 } else {
  2258.                                     $corte->setChecked(true);
  2259.                                 }
  2260.                                 $corte->setTolerancia(0.1);
  2261.                                 break;
  2262.                             case Corte::OPCIONES['precision']['id']:
  2263.                                 if ($this->getValorMinimoMedida() < 0.1) {
  2264.                                     $corte->setChecked(true);
  2265.                                 }
  2266.                                 break;
  2267.                         }
  2268.                         break;
  2269.                     default:
  2270.                         switch ($corte->getId()) {
  2271.                             case Corte::OPCIONES['estandar']['id']:
  2272.                                 $corte->setChecked(true);
  2273.                                 $corte->setTolerancia($this->getValorMinimoMedida());
  2274.                                 break;
  2275.                             case Corte::OPCIONES['precision']['id']:
  2276.                                 $corte->setDisabled(true);
  2277.                                 break;
  2278.                         }
  2279.                         break;
  2280.                 }
  2281.             } else if ($this->getTipoBoton() == TipoBoton::OPCIONES['chapa']['id']) {
  2282.                 switch ($corte->getId()) {
  2283.                     case Corte::OPCIONES['largo-especifico']['id']:
  2284.                         $corte->setChecked(true);
  2285.                         break;
  2286.                     case Corte::OPCIONES['cortes-especiales']['id']:
  2287.                         $corte->setDisabled(true);
  2288.                         break;
  2289.                 }
  2290.             }
  2291.         }
  2292.         return $cortes;
  2293.     }
  2294.     /**
  2295.      * * Devuelve el largo.
  2296.      * @return array
  2297.      */
  2298.     public function getLargo(): array
  2299.     {
  2300.         $maximo floatval($this->getValorMaximoMedida());
  2301.         $minimo floatval($this->getValorMinimoMedida());
  2302.         $paso $this->getValorPaso();
  2303.         if ($this->getTipoBoton() == TipoBoton::OPCIONES['accesorio']['id']) {
  2304.             $unidad $this->getUnidadMedidaFacturacion()
  2305.                 ->getId();
  2306.             if ($unidad == 'KG') {
  2307.                 $maximo null;
  2308.                 $minimo $this->getLargoStd1();
  2309.                 $paso $this->getLargoStd1();
  2310.             } else if ($unidad == 'M') {
  2311.                 $maximo null;
  2312.                 $minimo $this->getLargoStd1();
  2313.                 if ($this->getMinimoVentaGeneral()) {
  2314.                     $minimo $this->getMinimoVentaGeneral() ?? $this->getLargoStd1();
  2315.                 }
  2316.             }
  2317.         }
  2318.         $unidad $this->getUnidadMedidaStock()
  2319.             ->getId();
  2320.         switch ($unidad) {
  2321.             case 'KG':
  2322.                 $unidad = [
  2323.                     'plural' => 'kg',
  2324.                     'singular' => 'kg',
  2325.                 ];
  2326.                 break;
  2327.             default:
  2328.                 $unidad = [
  2329.                     'plural' => 'm',
  2330.                     'singular' => 'm',
  2331.                 ];
  2332.                 break;
  2333.         }
  2334.         return [
  2335.             'unidad' => $unidad,
  2336.             'maximo' => $maximo,
  2337.             'minimo' => $minimo,
  2338.             'paso' => $paso,
  2339.             'STD1' => $this->getLargoStd1(),
  2340.             'STD2' => $this->getLargoStd2(),
  2341.         ];
  2342.     }
  2343.     /**
  2344.      * * Devuelve las varbiables.
  2345.      * @return array
  2346.      */
  2347.     public function getVariables(): array
  2348.     {
  2349.         $variables = [
  2350.             // 
  2351.         ];
  2352.         if ($this->getTipoBoton() == TipoBoton::OPCIONES['mvko']['id']) {
  2353.             $tipoMVKO $this->getTipoMVKO();
  2354.             $dataMV $this->getDataMV();
  2355.             foreach ($tipoMVKO->getVariables() as $id_variable) {
  2356.                 $variable Variable::get($id_variable);
  2357.                 foreach ($dataMV as $name => $value) {
  2358.                     if (preg_match("/(Validacion )(\d+)/"$name)) {
  2359.                         if (gettype($variable->getPvi_variable_max()) == 'string') {
  2360.                             if (preg_match($variable->getPvi_variable_max(), $value)) {
  2361.                                 $variable->setPvi_variable_max(floatval(preg_replace($variable->getPvi_variable_max(), '$3'$value)));
  2362.                                 continue;
  2363.                             }
  2364.                         } else if (gettype($variable->getPvi_variable_max_2()) == 'string') {
  2365.                             if (preg_match($variable->getPvi_variable_max_2(), $value)) {
  2366.                                 $variable->setPvi_variable_max_2(floatval(preg_replace($variable->getPvi_variable_max_2(), '$3'$value)));
  2367.                                 continue;
  2368.                             }
  2369.                         } else if (gettype($variable->getPvi_variable_max_3()) == 'string') {
  2370.                             if (preg_match($variable->getPvi_variable_max_3(), $value)) {
  2371.                                 $variable->setPvi_variable_max_3(floatval(preg_replace($variable->getPvi_variable_max_3(), '$3'$value)));
  2372.                                 continue;
  2373.                             }
  2374.                         }
  2375.                         if (gettype($variable->getMax()) == 'string') {
  2376.                             if (preg_match($variable->getMax(), $value)) {
  2377.                                 $max floatval(preg_replace($variable->getMax(), '$3'$value));
  2378.                                 if (!preg_match("/<=/"$value)) {
  2379.                                     $max -= 1;
  2380.                                 }
  2381.                                 $variable->setMax($max);
  2382.                                 continue;
  2383.                             }
  2384.                         }
  2385.                         if (gettype($variable->getMin()) == 'string') {
  2386.                             if (preg_match($variable->getMin(), $value)) {
  2387.                                 $min floatval(preg_replace($variable->getMin(), '$3'$value));
  2388.                                 if (in_array($id_variable, [ Variable::OPCIONES['pvi_diamext']['id'], ]) || !(preg_match("/>=/"$value))) {
  2389.                                     $min += 1;
  2390.                                 }
  2391.                                 $variable->setMin($min);
  2392.                                 continue;
  2393.                             }
  2394.                         }
  2395.                         if (gettype($variable->getPvi_espesor_max()) == 'string') {
  2396.                             if (preg_match($variable->getPvi_espesor_max(), $value)) {
  2397.                                 $variable->setPvi_espesor_max(floatval(preg_replace($variable->getPvi_espesor_max(), '$6'$value)));
  2398.                                 continue;
  2399.                             }
  2400.                         } else if (gettype($variable->getPvi_espesor_max_2()) == 'string') {
  2401.                             if (preg_match($variable->getPvi_espesor_max_2(), $value)) {
  2402.                                 $variable->setPvi_espesor_max_2(floatval(preg_replace($variable->getPvi_espesor_max_2(), '$6'$value)));
  2403.                                 continue;
  2404.                             }
  2405.                         }
  2406.                     }
  2407.                 }
  2408.                 if ($id_variable == Variable::OPCIONES['pvi_espesor']['id']) {
  2409.                     $opciones = [
  2410.                         // 
  2411.                     ];
  2412.                     $max false;
  2413.                     $min false;
  2414.                     foreach ($dataMV['Espesores Validos'] as $value) {
  2415.                         $value floatval($value);
  2416.                         if ((gettype($variable->getMin()) == 'string' || $value >= $variable->getMin()) && (gettype($variable->getMax()) == 'string' || $value <= $variable->getMax())) {
  2417.                             $opciones[] = $value;
  2418.                             if (!$min || $min $value) {
  2419.                                 $min $value;
  2420.                             }
  2421.                             if (!$max || $max $value) {
  2422.                                 $max $value;
  2423.                             }
  2424.                         }
  2425.                     }
  2426.                     if (gettype($variable->getMin()) == 'string' || $variable->getMin() == || $variable->getMin() < $min) {
  2427.                         $variable->setMin($min);
  2428.                     }
  2429.                     if (gettype($variable->getMax()) == 'string' || $variable->getMax() == || $variable->getMax() > $max) {
  2430.                         $variable->setMax($max);
  2431.                     }
  2432.                     $variable->setOpciones($opciones);
  2433.                 }
  2434.                 $variables[] = $variable->__toArray();
  2435.             }
  2436.         }
  2437.         return $variables;
  2438.     }
  2439.     /**
  2440.      * * Devuelve los lotes.
  2441.      * @return array
  2442.      */
  2443.     public function getLotes(): array
  2444.     {
  2445.         $collection = [
  2446.             // 
  2447.         ];
  2448.         $precios $this->getPrecios();
  2449.         if ($this->lotes) {
  2450.             foreach ($this->lotes as $stdClass) {
  2451.                 $presentacion = new Lote([
  2452.                     'centroNombre' => $stdClass->CentroNombre,
  2453.                     'descuento' => $stdClass->DescuentoLote,
  2454.                     'inoxsale' => !empty($stdClass->Inoxsale),
  2455.                     'moneda' => $precios["Konwa"],
  2456.                     'nombre' => $stdClass->Charg,
  2457.                     'peso' => floatval($stdClass->Carac),
  2458.                     'precio' => floatval($stdClass->Precio),
  2459.                     'precioTotal' => floatval($stdClass->PrecioTotal),
  2460.                     'selected' => $stdClass->Seleccionado,
  2461.                     'stock' => intval($stdClass->Stock),
  2462.                 ]);
  2463.                 $collection[] = $presentacion;
  2464.             }
  2465.         }
  2466.         return $collection;
  2467.     }
  2468.     /**
  2469.      * * Guarda los lotes.
  2470.      * @param array $lotes
  2471.      * @return self
  2472.      */
  2473.     public function setLotes(array $lotes): self
  2474.     {
  2475.         $this->lotes $lotes;
  2476.         return $this;
  2477.     }
  2478.     /**
  2479.      * * Devuelve las bobinas.
  2480.      * @return array
  2481.      */
  2482.     public function getBobinas(): array
  2483.     {
  2484.         return $this->bobinas;
  2485.     }
  2486.     /**
  2487.      * * Guarda las bobinas.
  2488.      * @param array $bobinas
  2489.      * @return self
  2490.      */
  2491.     public function setBobinas(array $bobinas): self
  2492.     {
  2493.         $this->bobinas $bobinas;
  2494.         return $this;
  2495.     }
  2496.     /**
  2497.      * * Devuelve el producto en formato array.
  2498.      * @return array
  2499.      */
  2500.     public function __toArray(): array
  2501.     {
  2502.         $params = [
  2503.             // 
  2504.         ];
  2505.         $params['breadcrumb'] = $this->getBreadcrumb();
  2506.         $params['cantidadPacks'] = [
  2507.             $this->getCantidadPack1(),
  2508.             $this->getCantidadPack2(),
  2509.         ];
  2510.         $params['caracteristicas'] = [
  2511.             // 
  2512.         ];
  2513.         foreach ($this->getCaracteristicasValorEnOrden() as $caracteristica) {
  2514.             $params['caracteristicas'][] = $caracteristica;
  2515.         }
  2516.         $params['codigo'] = $this->getCodigo();
  2517.         $params['cortes'] = [
  2518.             // 
  2519.         ];
  2520.         $params['cortePrecision'] = $this->getCortePrecision();
  2521.         foreach ($this->getCortes() as $corte) {
  2522.             $params['cortes'][] = $corte->__toArray();
  2523.         }
  2524.         $params['descripcion'] = $this->getSubfamilia()->getTextoExtEs();
  2525.         $params['esInmovilizado'] = $this->isInmovilizado();
  2526.         $params['esInoxsale'] = $this->isInoxsale();
  2527.         $params['esMalla'] = $this->getGrupoDeMaterial() == "M";
  2528.         $params['esCable'] = $this->getMinimoVentaGeneral() == && $this->getGrupoDeMaterial() == "CAI";
  2529.         $params['formaCortes'] = [
  2530.             // 
  2531.         ];
  2532.         $params['imagenes'] = $this->getImagenesConExtension();
  2533.         $params['lado'] = null;
  2534.         $params['largo'] = $this->getLargo();
  2535.         $params['lotes'] = [
  2536.             // 
  2537.         ];
  2538.         foreach ($this->getLotes() as $lote) {
  2539.             $params['lotes'][] = $lote->__toArray();
  2540.         }
  2541.         $params['nombre'] = $this->getNombreEs();
  2542.         $params['precios'] = $this->getPrecios();
  2543.         $params['presentaciones'] = [
  2544.             // 
  2545.         ];
  2546.         foreach ($this->getPresentaciones() as $presentacion) {
  2547.             $params['presentaciones'][] = $presentacion->__toArray();
  2548.         }
  2549.         $params['recortes'] = [
  2550.             // 
  2551.         ];
  2552.         foreach ($this->getRecortes() as $recorte) {
  2553.             $params['recortes'][] = $recorte->__toArray();
  2554.         }
  2555.         $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
  2556.         $params['tipoBoton'] = ($this->getTipoBotonEntity())->__toArray();
  2557.         $params['tipoCortes'] = [
  2558.             // 
  2559.         ];
  2560.         $params['tipoMVKO'] = $this->getTipoMVKO();
  2561.         if ($params['tipoMVKO']) {
  2562.             $params['tipoMVKO'] = $params['tipoMVKO']->__toArray();
  2563.         }
  2564.         $params['unidadMedidaFacturacion'] = ($this->getUnidadMedidaFacturacion())->__toArray();
  2565.         $params['unidadMedidaStock'] = ($this->getUnidadMedidaStock())->__toArray();
  2566.         $params['variables'] = $this->getVariables();
  2567.         $params['video'] = $this->getVideo();
  2568.         $params['viniles'] = [
  2569.             // 
  2570.         ];
  2571.         foreach ($this->getViniles() as $vinil) {
  2572.             $params['viniles'][] = $vinil->__toArray();
  2573.         }
  2574.         return $params;
  2575.     }
  2576. }