<?php
declare(strict_types=1);
namespace Croisiland\CommonBundle\Entity\Cabin;
use Crea\MediaBundle\Entity\MediaTagOwnerInterface;
use Crea\ToolsBundle\Entity\LifecycleUserIdentifierTrait;
use Crea\ToolsBundle\Traits\KeyValueTrait;
use Croisiland\CommonBundle\Annotation\Cabin\CabinTypeFormValidator;
use Croisiland\CommonBundle\Entity\Partner\PartnerCompanyDiscount;
use Croisiland\CommonBundle\Entity\Traits\IsActiveTrait;
use Croisiland\CommonBundle\Entity\Traits\ListOrderTrait;
use Croisiland\CommonBundle\Repository\Cabin\CabinTypeRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Util\ClassUtils;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity(repositoryClass=CabinTypeRepository::class)
*
* @CabinTypeFormValidator(groups={"cabin_type_form_validator"})
*/
class CabinType implements \Stringable, MediaTagOwnerInterface
{
use IsActiveTrait;
use ListOrderTrait;
use LifecycleUserIdentifierTrait;
use KeyValueTrait;
/**
* @ORM\Id
*
* @ORM\GeneratedValue
*
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=255)
*/
private ?string $name = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $shortName = null;
/**
* @ORM\Column(type="string", length=100, unique=true)
*
* @Gedmo\Slug(fields={"name"}, updatable=false, unique=true)
*/
private ?string $slug = null;
/**
* @var Collection<int, CabinSubType>
*
* @ORM\OneToMany(targetEntity=CabinSubType::class, mappedBy="cabinType", orphanRemoval=true)
*/
private Collection $cabinSubTypes;
/**
* @var Collection<int, PartnerCompanyDiscount>
*
* @ORM\OneToMany(targetEntity=PartnerCompanyDiscount::class, mappedBy="cabinType")
*/
private $partnerCompanyDiscounts;
public function __construct()
{
$this->cabinSubTypes = new ArrayCollection();
$this->partnerCompanyDiscounts = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
public function getShortName(): ?string
{
return $this->shortName;
}
public function setShortName(?string $shortName): self
{
$this->shortName = $shortName;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(?string $slug): self
{
$this->slug = $slug;
return $this;
}
/**
* @return Collection<int, CabinSubType>
*/
public function getCabinSubTypes(): Collection
{
return $this->cabinSubTypes;
}
public function addCabinSubType(CabinSubType $cabinSubType): self
{
if (!$this->cabinSubTypes->contains($cabinSubType)) {
$this->cabinSubTypes[] = $cabinSubType;
$cabinSubType->setCabinType($this);
}
return $this;
}
public function removeCabinSubType(CabinSubType $cabinSubType): self
{
if ($this->cabinSubTypes->removeElement($cabinSubType)) {
// set the owning side to null (unless already changed)
if ($cabinSubType->getCabinType() === $this) {
$cabinSubType->setCabinType(null);
}
}
return $this;
}
/**
* @return Collection<int, PartnerCompanyDiscount>
*/
public function getPartnerCompanyDiscounts(): Collection
{
return $this->partnerCompanyDiscounts;
}
public function addPartnerCompanyDiscount(PartnerCompanyDiscount $partnerCompanyDiscount): self
{
if (!$this->partnerCompanyDiscounts->contains($partnerCompanyDiscount)) {
$this->partnerCompanyDiscounts[] = $partnerCompanyDiscount;
$partnerCompanyDiscount->setCabinType($this);
}
return $this;
}
public function removePartnerCompanyDiscount(PartnerCompanyDiscount $partnerCompanyDiscount): self
{
if ($this->partnerCompanyDiscounts->removeElement($partnerCompanyDiscount)) {
// set the owning side to null (unless already changed)
if ($partnerCompanyDiscount->getCabinType() === $this) {
$partnerCompanyDiscount->setCabinType(null);
}
}
return $this;
}
public function __toString(): string
{
return (string) $this->name;
}
/**
* Method liée au Média Bundle
*/
public function getMediaTagOwnerLabel(): ?string
{
return $this->getName();
}
/**
* Method liée au Média Bundle
* @return class-string
*/
public function getFqcn(): string
{
return ClassUtils::getClass($this);
}
}