<?php
namespace App\Entity;
use App\Validator\Constraints as AppAssert;
use App\Classes\Hasher;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Label
*
* @ORM\Table(name="malys_invitation")
* @ORM\Entity(repositoryClass="App\Repository\InvitationRepository")
* @ORM\HasLifecycleCallbacks()
* @AppAssert\Invitation()
*/
class Invitation
{
public const TYPE_JOIN_SHOPS = 'joinShops';
public const TYPE_BECOME_ADMIN = 'becomeGroupAdmin';
public const TYPES = [
self::TYPE_JOIN_SHOPS,
self::TYPE_BECOME_ADMIN
];
public const STATUS_PENDING = 'pending';
public const STATUS_ACCEPTED = 'accepted';
public const STATUS_REFUSED = 'refused';
public const DEFAULT_STATUS = self::STATUS_PENDING;
public const STATUS = [
self::STATUS_PENDING,
self::STATUS_ACCEPTED,
self::STATUS_REFUSED
];
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumn(name="invited_user_id", referencedColumnName="id")
*/
public $invitedUser;
/**
* @ORM\Column(name="invited_email", type="string", nullable=true)
* @Assert\Email
*/
public $invitedEmail;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="App\Entity\Customer")
*/
protected $shops;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\CustomerGroup")
* @ORM\JoinColumn(name="customer_group_id", referencedColumnName="id")
* @Assert\NotBlank
*/
public $customerGroup;
/**
* @ORM\Column(name="hashed_id", type="string", nullable=false)
*/
protected $hashedId;
/**
* @var DateTime
*
* @ORM\Column(name="createdAt", type="datetime", nullable=false)
*/
protected $createdAt;
/**
* @var DateTime
*
* @ORM\Column(name="updatedAt", type="datetime", nullable=true)
*/
protected $updatedAt;
/**
* @ORM\Column(name="type", type="string", nullable=false)
* @Assert\Choice (callback="getAvailableTypes")
*/
protected $type;
/**
* @ORM\Column(name="status", type="string", nullable=false)
* @Assert\Choice (callback="getAvailableStatus")
*/
protected $status = 'pending';
public function __construct()
{
$this->shops = new ArrayCollection();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set createdAt
* @ORM\PrePersist
*/
public function setCreatedAt()
{
$this->createdAt = new DateTime();
$this->updatedAt = new DateTime();
return $this;
}
/**
* @return DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* Set updatedAt
* @ORM\PreUpdate
*/
public function setUpdatedAt()
{
$this->updatedAt = new DateTime();
return $this;
}
public function getPictureFile()
{
return $this->pictureFile;
}
/**
* @return mixed
*/
public function getInvitedUser(): ?User
{
return $this->invitedUser;
}
/**
* @param mixed $invitedUser
*/
public function setInvitedUser(?User $invitedUser): void
{
$this->invitedUser = $invitedUser;
}
/**
* @return mixed
*/
public function getInvitedEmail()
{
return $this->invitedEmail;
}
/**
* @param mixed $invitedEmail
*/
public function setInvitedEmail(?string $invitedEmail): void
{
$this->invitedEmail = $invitedEmail;
}
/**
* @return ArrayCollection
*/
public function getShops()
{
return $this->shops;
}
/**
* @param ArrayCollection $shops
*/
public function setShops(ArrayCollection $shops): void
{
$this->shops = $shops;
}
public function addShop(Customer $shop)
{
if (!$this->shops->contains($shop)) {
$this->shops->add($shop);
}
}
/**
* @return mixed
*/
public function getHashedId()
{
return $this->hashedId;
}
/**
* @param mixed $hashedId
*/
public function setHashedId($hashedId): void
{
$this->hashedId = $hashedId;
}
/**
* @return string
*/
public function getStatus(): string
{
return $this->status;
}
/**
* @param string $status
*/
public function setStatus(string $status): void
{
$this->status = $status;
}
public function getAvailableStatus(): array
{
return self::STATUS;
}
public function getAvailableTypes(): array
{
return self::TYPES;
}
/**
* @return mixed
*/
public function getCustomerGroup()
{
return $this->customerGroup;
}
/**
* @param mixed $customerGroup
*/
public function setCustomerGroup(CustomerGroup $customerGroup): void
{
$this->customerGroup = $customerGroup;
}
/**
* @return mixed
*/
public function getType()
{
return $this->type;
}
/**
* @param mixed $type
*/
public function setType($type): void
{
$this->type = $type;
}
/**
* @ORM\PrePersist
*/
public function installHashedId()
{
if (is_null($this->hashedId)) {
$this->hashedId = Hasher::generateHash(self::class);
}
}
}