<?php
namespace App\Entity\Sogec;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\MediaObject\MediaPromotion;
use App\Entity\User\User;
use App\Repository\Sogec\PromotionRepository;
use App\Validator\Constraints as AppAssert;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Ramsey\Uuid\Doctrine\UuidGenerator;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
/**
* @ORM\Entity(repositoryClass=PromotionRepository::class)
*
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={
* "Promotion:output",
* "Promotion:io",
* }},
* "denormalization_context"={"groups"={
* "Promotion:input",
* "Promotion:io",
* }}
* },
* itemOperations={
* "get"
* }
* )
*/
class Promotion
{
/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidGenerator::class)
*/
private $id;
/**
* @ORM\Column(type="datetime")
* @AppAssert\OverlappingDate(
* class="App\Entity\Sogec\Promotion",
* startField="startedAt",
* endField="endedAt",
* customMsg="Une autre promotion est déjà paramétrée dans cette tranche de date",
* groups={
* "Promotion",
* }
* )
*/
private $startedAt;
/**
* @ORM\Column(type="datetime")
* @AppAssert\OverlappingDate(
* class="App\Entity\Sogec\Promotion",
* startField="startedAt",
* endField="endedAt",
* customMsg="Une autre promotion est déjà paramétrée dans cette tranche de date",
* )
*/
private $endedAt;
/**
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $quantity;
/**
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $amount;
/**
* @ORM\Column(type="integer")
*/
private $multiplier;
/**
* @var MediaPromotion
* @ORM\OneToMany(targetEntity=MediaPromotion::class, mappedBy="promotion", cascade={"persist"})
* @SerializedName("thumbnail_blogs")
* @Groups({
* "Promotion:output",
* "MediaPromotion:io"
* })
*/
private $mediaPromotions;
/**
* @ORM\ManyToOne(targetEntity=User::class)
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private User $user;
public function __construct()
{
$this->mediaPromotions = new ArrayCollection();
}
public function getId(): ?string
{
return $this->id;
}
public function getStartedAt(): ?\DateTimeInterface
{
return $this->startedAt;
}
public function setStartedAt(\DateTimeInterface $startedAt): self
{
$this->startedAt = $startedAt;
return $this;
}
public function getEndedAt(): ?\DateTimeInterface
{
return $this->endedAt;
}
public function setEndedAt(\DateTimeInterface $endedAt): self
{
$date = new \DateTime($endedAt->format('Y-m-d H:i:s'));
$this->endedAt = $date->setTime(23, 59, 59);
return $this;
}
public function getQuantity(): ?bool
{
return $this->quantity;
}
public function setQuantity(bool $quantity): self
{
$this->quantity = $quantity;
return $this;
}
public function getAmount(): ?bool
{
return $this->amount;
}
public function setAmount(bool $amount): self
{
$this->amount = $amount;
return $this;
}
public function getMultiplier(): ?int
{
return $this->multiplier;
}
public function setMultiplier(int $multiplier): self
{
$this->multiplier = $multiplier;
return $this;
}
public function getMediaPromotions()
{
return $this->mediaPromotions;
}
public function setMediaPromotions(MediaPromotion $mediaPromotions): Promotion
{
$this->mediaPromotions = $mediaPromotions;
return $this;
}
public function addMediaPromotion(MediaPromotion $mediaPromotion)
{
if ($this->mediaPromotions->contains($mediaPromotion)) {
return;
}
$this->mediaPromotions[] = $mediaPromotion;
$mediaPromotion->setPromotion($this);
}
public function getUser(): User
{
return $this->user;
}
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}
}