<?php
namespace App\Entity\Catalogo;
use App\Entity\Ajustes\AtrValores;
use App\Entity\Ajustes\Historico;
use App\Entity\Ajustes\HistProdLinea;
use App\Entity\Ajustes\PedidosAccesorios;
use App\Repository\Catalogo\ProductoRepository;
use App\Traits\ChangesAtTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=ProductoRepository::class)
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(fields="prodReferencia", message="La referencia definida ya está en uso por otro producto.")
* @Vich\Uploadable
*/
class Producto
{
use ChangesAtTrait;
public const BASEDIR = '/pages/privado/catalogo/productos';
public const BASEDIRPUBLIC = '/pages/publico/tienda';
public const ICON_CLASS = 'fas fa-archive';
public const ICON = '<i class="'.self::ICON_CLASS.'"></i>';
public const ESTADOS = [
'producto.estados.activo' => 1,
'producto.estados.inactivo' => 0,
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"Simple"})
*/
private $id;
/**
* @Groups({"Simple"})
*/
private $text;
/**
* @ORM\Column(type="string", length=255)
*/
private $prodNombre;
/**
* @ORM\Column(type="string", length=100, nullable=true, unique=true)
*/
private $prodReferencia;
/**
* @ORM\Column(type="boolean")
*/
private $prodEstado;
/**
* @ORM\Column(type="string", nullable=true)
* @Groups({"Simple"})
*/
private $prodDescripcion;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $prodImage;
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="productos_imagen", fileNameProperty="prodImage")
*
* @var null|File
*/
private $prodImageFile;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $prodOriginalName;
/**
* @ORM\OneToMany(targetEntity=HistProdLinea::class, mappedBy="HistProd", cascade={"persist","remove"})
*/
private $HistProdLineas;
/**
* @ORM\Column(type="decimal", precision=10, scale=2, nullable=true)
* @Groups({"Simple"})
*/
private $prodPrecio;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $prodDescripcionLarga;
/**
* @ORM\OneToMany(targetEntity=PedidosAccesorios::class, mappedBy="PedAccProducto")
*/
private $prodPedidoLineas;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $prodIdioma;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $ProdOldID;
public function __construct()
{
$this->createdAt = new \DateTime();
$this->HistProdLineas = new ArrayCollection();
$this->prodPedidoLineas = new ArrayCollection();
}
public function __toString(): string
{
return (string) $this->prodNombre;
}
public function getText(): string
{
return (string) $this->__toString();
}
/**
* @ORM\PreUpdate
*/
public function preUpdateEntity()
{
$this->updatedAt = new \DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function getProdNombre(): ?string
{
return $this->prodNombre;
}
public function setProdNombre(string $prodNombre): self
{
$this->prodNombre = $prodNombre;
return $this;
}
public function getProdReferencia(): ?string
{
return $this->prodReferencia;
}
public function setProdReferencia(?string $prodReferencia): self
{
$this->prodReferencia = $prodReferencia;
return $this;
}
public function getProdEstado(): ?int
{
return $this->prodEstado;
}
public function setProdEstado(int $prodEstado): self
{
$this->prodEstado = $prodEstado;
return $this;
}
public function getProdEstadoTag(string $text = ''): string
{
return $this->prodEstado ?
'<span class="badge badge-light-success">'.$text.'</span>' :
'<span class="badge badge-light-danger">'.$text.'</span>'
;
}
public function getProdEnabledText(): string
{
return false === array_search($this->prodEstado, self::ESTADOS) ? 'producto.estados.none' : array_search($this->prodEstado, self::ESTADOS);
}
public function getProdDescripcion(): ?string
{
return $this->prodDescripcion;
}
public function setProdDescripcion(?string $prodDescripcion): self
{
$this->prodDescripcion = $prodDescripcion;
return $this;
}
public function getProdImage(): ?string
{
return $this->prodImage;
}
public function setProdImage(?string $prodImage): self
{
$this->prodImage = $prodImage;
return $this;
}
/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param null|File|\Symfony\Component\HttpFoundation\File\UploadedFile $imageFile
*/
public function setProdImageFile(?File $imageFile = null): void
{
$this->prodImageFile = $imageFile;
if (null !== $imageFile) {
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
$this->updatedAt = new \DateTime();
}
}
public function getProdImageFile(): ?File
{
return $this->prodImageFile;
}
public function getProdOriginalName(): ?string
{
return $this->prodOriginalName;
}
public function setProdOriginalName(?string $prodOriginalName): self
{
$this->prodOriginalName = $prodOriginalName;
return $this;
}
/**
* @return Collection<int, HistProdLinea>
*/
public function getHistProdLineas(): Collection
{
return $this->HistProdLineas;
}
public function addHistProdLinea(HistProdLinea $histProdLinea): self
{
if (!$this->HistProdLineas->contains($histProdLinea)) {
$this->HistProdLineas[] = $histProdLinea;
$histProdLinea->setHistProd($this);
}
return $this;
}
public function removeHistProdLinea(HistProdLinea $histProdLinea): self
{
if ($this->HistProdLineas->removeElement($histProdLinea)) {
// set the owning side to null (unless already changed)
if ($histProdLinea->getHistProd() === $this) {
$histProdLinea->setHistProd(null);
}
}
return $this;
}
public function getProdPrecio(): ?string
{
return $this->prodPrecio;
}
public function setProdPrecio(?string $prodPrecio): self
{
$this->prodPrecio = $prodPrecio;
return $this;
}
public function getProdDescripcionLarga(): ?string
{
return $this->prodDescripcionLarga;
}
public function setProdDescripcionLarga(?string $prodDescripcionLarga): self
{
$this->prodDescripcionLarga = $prodDescripcionLarga;
return $this;
}
/**
* @return Collection<int, PedidosAccesorios>
*/
public function getProdPedidoLineas(): Collection
{
return $this->prodPedidoLineas;
}
public function addProdPedidoLinea(PedidosAccesorios $prodPedidoLinea): self
{
if (!$this->prodPedidoLineas->contains($prodPedidoLinea)) {
$this->prodPedidoLineas[] = $prodPedidoLinea;
$prodPedidoLinea->setPedAccProducto($this);
}
return $this;
}
public function removeProdPedidoLinea(PedidosAccesorios $prodPedidoLinea): self
{
if ($this->prodPedidoLineas->removeElement($prodPedidoLinea)) {
// set the owning side to null (unless already changed)
if ($prodPedidoLinea->getPedAccProducto() === $this) {
$prodPedidoLinea->setPedAccProducto(null);
}
}
return $this;
}
public function getProdIdioma(): ?string
{
return $this->prodIdioma;
}
public function setProdIdioma(?string $prodIdioma): self
{
$this->prodIdioma = $prodIdioma;
return $this;
}
public function getProdOldID(): ?int
{
return $this->ProdOldID;
}
public function setProdOldID(?int $ProdOldID): self
{
$this->ProdOldID = $ProdOldID;
return $this;
}
}