<?php
namespace App\Entity\Gos;
use App\Repository\SalesManagoProductVariantRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity(repositoryClass=SalesManagoProductVariantRepository::class)
* @Vich\Uploadable
*/
class SalesManagoProductVariant
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity=ProductVariant::class, inversedBy="salesManagoProductVariant", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $productVariant;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $category;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\Column(type="string", length=512)
*/
private $productUrl;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $bestseller;
/**
* @ORM\Column(type="boolean")
*/
private $newProduct;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $discountPrice;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $mainImageUrl;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $useUploadedMainImage;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @var string
*/
private $uploadedMainImage;
/**
* @Vich\UploadableField(mapping="sales_manago_product_variant_image", fileNameProperty="uploadedMainImage")
*/
private $mainImageFile;
/**
* @ORM\OneToMany(targetEntity=SalesManagoProductVariantImage::class, mappedBy="productVariant", orphanRemoval=true, cascade={"persist"})
* @Assert\Count(max=2, maxMessage="You can upload maximum {{ limit }} images")
*/
private $images;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $updatedAt;
public function __construct()
{
$this->images = new ArrayCollection();
}
public static function loadValidatorMetadata(ClassMetadata $metadata): void
{
$metadata->addPropertyConstraint('images', new Assert\Count([
'max' => 2,
'maxMessage' => 'You cannot specify more than {{ limit }} emails',
]));
}
public function getId(): ?int
{
return $this->id;
}
public function getProductVariant(): ?ProductVariant
{
return $this->productVariant;
}
public function setProductVariant(ProductVariant $productVariant): self
{
$this->productVariant = $productVariant;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
public function getCategory(): ?string
{
return $this->category;
}
public function setCategory(?string $category): self
{
$this->category = $category;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getProductUrl(): ?string
{
return $this->productUrl;
}
public function setProductUrl(?string $productUrl): self
{
$this->productUrl = $productUrl;
return $this;
}
public function getBestseller(): ?bool
{
return $this->bestseller;
}
public function setBestseller(?bool $bestseller): self
{
$this->bestseller = $bestseller;
return $this;
}
public function getNewProduct(): ?bool
{
return $this->newProduct;
}
public function setNewProduct(bool $newProduct): self
{
$this->newProduct = $newProduct;
return $this;
}
public function getDiscountPrice(): ?float
{
return $this->discountPrice;
}
public function setDiscountPrice(?float $discountPrice): self
{
$this->discountPrice = $discountPrice;
return $this;
}
public function getMainImageUrl(): ?string
{
return $this->mainImageUrl;
}
public function setMainImageUrl(?string $mainImageUrl): self
{
$this->mainImageUrl = $mainImageUrl;
return $this;
}
public function getUseUploadedMainImage(): ?bool
{
return $this->useUploadedMainImage;
}
public function setUseUploadedMainImage(?bool $useUploadedMainImage): self
{
$this->useUploadedMainImage = $useUploadedMainImage;
return $this;
}
public function getUploadedMainImage(): ?string
{
return $this->uploadedMainImage;
}
public function setUploadedMainImage(?string $uploadedMainImage): self
{
$this->uploadedMainImage = $uploadedMainImage;
return $this;
}
public function setMainImageFile(?File $mainImageFile = null)
{
$this->mainImageFile = $mainImageFile;
// VERY IMPORTANT:
// 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
if ($mainImageFile)
{
// if 'updatedAt' is not defined in your entity, use another property
$this->updatedAt = new \DateTime('now');
}
}
public function getMainImageFile(): ?File
{
return $this->mainImageFile;
}
public function getImages(): Collection
{
return $this->images;
}
public function addImage(SalesManagoProductVariantImage $image): self
{
if (!$this->images->contains($image)) {
$this->images[] = $image;
$image->setProductVariant($this);
}
return $this;
}
public function removeImage(SalesManagoProductVariantImage $image): self
{
if ($this->images->contains($image)) {
$this->images->removeElement($image);
// set the owning side to null (unless already changed)
if ($image->getProductVariant() === $this) {
$image->setProductVariant(null);
}
}
return $this;
}
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getUpdatedAt()
{
return $this->updatedAt;
}
}