<?php
namespace App\Entity;
use App\Repository\ProductRepository;
use App\Trait\SearchEngineOptimization;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ProductRepository::class)]
#[ORM\InheritanceType('JOINED')]
#[ORM\DiscriminatorMap(
[
'hotelContract' => HotelContract::class,
'party' => Party::class,
'xmlAPI' => XmlApi::class,
'transfer' => Transfer::class,
'extra' => Extra::class,
'customService' => CustomService::class,
'manualFlight' => ManualFlight::class,
]
)]
class Product
{
use SearchEngineOptimization;
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\ManyToOne(targetEntity: Provider::class , cascade: ['persist', 'detach'] )]
#[ORM\JoinColumn(nullable: false)]
private ?Provider $provider = null;
#[ORM\OneToMany(mappedBy: 'product', targetEntity: ProductElement::class, orphanRemoval: true)]
private Collection $productElements;
#[ORM\Column(nullable: true)]
private ?bool $onlyBack = null;
#[ORM\OneToMany(mappedBy: 'product', targetEntity: FileData::class , cascade: ['persist'])]
private Collection $images;
public function __construct()
{
$this->productElements = new ArrayCollection();
$this->images = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getProvider(): ?Provider
{
return $this->provider;
}
public function getPrimaryImageUrl(): ?string
{
foreach ($this->images as $image){
if($image->getDisplayOrder()==1){
return $image->getUrl();
}
}
return null;
}
public function setProvider(?Provider $provider): self
{
$this->provider = $provider;
return $this;
}
public function getType(): string
{
return get_class($this);
}
/**
* @return Collection<int, ProductElement>
*/
public function getProductElements(): Collection
{
return $this->productElements;
}
public function addProductElement(ProductElement $productElement): self
{
if (!$this->productElements->contains($productElement)) {
$this->productElements->add($productElement);
$productElement->setProduct($this);
}
return $this;
}
public function removeProductElement(ProductElement $productElement): self
{
if ($this->productElements->removeElement($productElement)) {
// set the owning side to null (unless already changed)
if ($productElement->getProduct() === $this) {
$productElement->setProduct(null);
}
}
return $this;
}
public function isOnlyBack(): ?bool
{
return $this->onlyBack;
}
public function setOnlyBack(?bool $onlyBack): self
{
$this->onlyBack = $onlyBack;
return $this;
}
/**
* @return Collection<int, FileData>
*/
public function getImages(): Collection
{
return $this->images;
}
public function addImage(FileData $image): static
{
if (!$this->images->contains($image)) {
$this->images->add($image);
$image->setProduct($this);
}
return $this;
}
public function removeImage(FileData $image): static
{
if ($this->images->removeElement($image)) {
// set the owning side to null (unless already changed)
if ($image->getProduct() === $this) {
$image->setProduct(null);
}
}
return $this;
}
public function getClass() : string {
return "Product";
}
public function getIcon() : string{
return "fe-square";
}
}