<?php
namespace App\Entity\Details\Operation;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Ean\Ean;
use App\Entity\MediaObject\MediaMultiOffer;
use App\Entity\MediaObject\MediaPdfOdr;
use App\Entity\Operation\MultiOffer;
use App\Repository\Details\DetailsMultiOfferRepository;
use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Ramsey\Uuid\Doctrine\UuidGenerator;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
use DateTime;
/**
* @ApiResource(
* attributes={
* "normalization_context"={
* "groups"={
* "DetailsMultiOffer:output",
* "DetailsMultiOffer:io"
* }
* },
* "denormalization_context"={
* "groups"={
* "DetailsMultiOffer:input",
* "DetailsMultiOffer:io"
* }
* },
* },
* collectionOperations={
* "post"={
* "method"="POST",
* "access_control"="is_granted('ROLE_ADMIN_SOGEC')",
* },
* "get"={
* "method"="GET",
* "access_control"="is_granted('ROLE_ADMIN_SOGEC')",
* },
* },
* itemOperations={
* "put"={
* "method"="PUT",
* "access_control"="is_granted('ROLE_ADMIN_SOGEC')",
* },
* "get"={
* "method"="GET"
* },
* }
* )
*
* @ORM\Entity(repositoryClass=DetailsMultiOfferRepository::class)
*/
class DetailsMultiOffer
{
/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidGenerator::class)
* @SerializedName("id")
* @ApiProperty(identifier=true)
* @Groups({
* "DetailsMultiOffer:output",
* "OperationMultiOffer:io",
* "get_participation_multi_odrs_by_user",
* })
*/
private string $id;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Operation\MultiOffer")
* @ORM\JoinColumn(name="multi_offer_id", referencedColumnName="id")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private MultiOffer $multiOffer;
/**
* @ORM\Column(type="string", length=200, nullable=true)
* @SerializedName("description_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?string $descriptionOdr;
/**
* @ORM\Column(type="string", length=200, nullable=true)
* @SerializedName("description_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?string $descriptionCoupon;
/**
* @ORM\Column(type="string", length=255)
* @SerializedName("title_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private string $titleOdr;
/**
* @ORM\Column(type="string", length=255)
* @SerializedName("title_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private string $titleCoupon;
/**
* @ORM\OneToOne(targetEntity=MediaMultiOffer::class, cascade={"persist", "remove"})
* @SerializedName("image_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private MediaMultiOffer $imageOdr;
/**
* @ORM\OneToOne(targetEntity=MediaMultiOffer::class, cascade={"persist", "remove"})
* @SerializedName("image_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private MediaMultiOffer $imageCoupon;
/**
* @ORM\Column(type="integer")
* @SerializedName("ratio_cashback")
*/
private int $ratioCashback;
/**
* @ORM\OneToOne(targetEntity=MediaPdfOdr::class, cascade={"persist", "remove"})
* @SerializedName("pdf_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private MediaPdfOdr $pdfOdr;
/**
* @ORM\Column(type="string", length=255)
* @SerializedName("code_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?string $codeOdr;
/**
* @ORM\Column(type="string", length=255)
* @SerializedName("code_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?string $codeCoupon;
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @SerializedName("end_participation_date_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
* @ApiFilter(DateFilter::class, strategy=DateFilter::EXCLUDE_NULL)
*/
private DateTime $endParticipationDateOdr;
/**
* @ORM\Column(type="integer")
* @SerializedName("stock_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?int $stockOdr;
/**
* @ORM\Column(type="integer")
* @SerializedName("stock_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?int $stockCoupon;
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @SerializedName("end_emission_date_coupon")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private DateTime $endEmissionDateCoupon;
/**
* @ORM\OneToMany(targetEntity=Ean::class, mappedBy="detailsMultiOffer", fetch="EAGER")
* @SerializedName("eans")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private Collection $eansOdr;
/**
* @ORM\Column(type="boolean", options={"default": 0})
* @SerializedName("is_eans_odr_active")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private bool $isEansOdrActive;
/**
* @SerializedName("description_modality_odr")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
* @ORM\Column(type="string", length="500", nullable=true)
*/
private ?string $descriptionModalityOdr;
public function __construct()
{
$this->eansOdr = new ArrayCollection();
}
/**
* @return string
*/
public function getId(): string
{
return $this->id;
}
/**
* @return MultiOffer
*/
public function getMultiOffer(): MultiOffer
{
return $this->multiOffer;
}
/**
* @param MultiOffer $multiOffer
* @return DetailsMultiOffer
*/
public function setMultiOffer(MultiOffer $multiOffer): DetailsMultiOffer
{
$this->multiOffer = $multiOffer;
return $this;
}
public function getDescriptionOdr(): ?string
{
return $this->descriptionOdr;
}
public function setDescriptionOdr(?string $descriptionOdr): DetailsMultiOffer
{
$this->descriptionOdr = $descriptionOdr;
return $this;
}
public function getDescriptionCoupon(): ?string
{
return $this->descriptionCoupon;
}
public function setDescriptionCoupon(?string $descriptionCoupon): DetailsMultiOffer
{
$this->descriptionCoupon = $descriptionCoupon;
return $this;
}
/**
* @return string
*/
public function getTitleOdr(): string
{
return $this->titleOdr;
}
/**
* @param string $titleOdr
* @return DetailsMultiOffer
*/
public function setTitleOdr(string $titleOdr): DetailsMultiOffer
{
$this->titleOdr = $titleOdr;
return $this;
}
/**
* @return string
*/
public function getTitleCoupon(): string
{
return $this->titleCoupon;
}
/**
* @param string $titleCoupon
* @return DetailsMultiOffer
*/
public function setTitleCoupon(string $titleCoupon): DetailsMultiOffer
{
$this->titleCoupon = $titleCoupon;
return $this;
}
/**
* @return MediaMultiOffer
*/
public function getImageOdr(): MediaMultiOffer
{
return $this->imageOdr;
}
/**
* @param MediaMultiOffer $imageOdr
* @return DetailsMultiOffer
*/
public function setImageOdr(MediaMultiOffer $imageOdr): DetailsMultiOffer
{
$this->imageOdr = $imageOdr;
return $this;
}
/**
* @return MediaMultiOffer
*/
public function getImageCoupon(): MediaMultiOffer
{
return $this->imageCoupon;
}
/**
* @param MediaMultiOffer $imageCoupon
* @return DetailsMultiOffer
*/
public function setImageCoupon(MediaMultiOffer $imageCoupon): DetailsMultiOffer
{
$this->imageCoupon = $imageCoupon;
return $this;
}
public function getRatioCashback(): ?int
{
return $this->ratioCashback;
}
public function setRatioCashback(int $ratioCashback): self
{
$this->ratioCashback = $ratioCashback;
return $this;
}
public function getPdfOdr(): ?MediaPdfOdr
{
return $this->pdfOdr;
}
public function setPdfOdr(?MediaPdfOdr $pdfOdr): self
{
$this->pdfOdr = $pdfOdr;
return $this;
}
public function getCodeOdr(): ?string
{
return $this->codeOdr;
}
public function setCodeOdr(string $codeOdr): self
{
$this->codeOdr = $codeOdr;
return $this;
}
public function getCodeCoupon(): ?string
{
return $this->codeCoupon;
}
public function setCodeCoupon(string $codeCoupon): self
{
$this->codeCoupon = $codeCoupon;
return $this;
}
public function getStockOdr(): ?int
{
return $this->stockOdr;
}
public function setStockOdr(int $stockOdr): self
{
$this->stockOdr = $stockOdr;
return $this;
}
public function getStockCoupon(): ?int
{
return $this->stockCoupon;
}
public function setStockCoupon(int $stockCoupon): self
{
$this->stockCoupon = $stockCoupon;
return $this;
}
public function getEndParticipationDateOdr(): DateTime
{
return $this->endParticipationDateOdr;
}
public function setEndParticipationDateOdr(DateTime $endParticipationDateOdr): DetailsMultiOffer
{
$this->endParticipationDateOdr = $endParticipationDateOdr;
return $this;
}
public function getEndEmissionDateCoupon(): DateTime
{
return $this->endEmissionDateCoupon;
}
public function setEndEmissionDateCoupon(DateTime $endEmissionDateCoupon): DetailsMultiOffer
{
$this->endEmissionDateCoupon = $endEmissionDateCoupon;
return $this;
}
public function decreaseStockOdr()
{
$this->stockOdr--;
}
public function decreaseStockCoupon()
{
$this->stockCoupon--;
}
/**
* @return Collection<int, Ean>
*/
public function getEansOdr(): Collection
{
return $this->eansOdr;
}
/**
* @param Collection $eansOdr
* @return DetailsMultiOffer
*/
public function setEansOdr(Collection $eansOdr): DetailsMultiOffer
{
$this->eansOdr = $eansOdr;
return $this;
}
public function addEanOdr(Ean $ean)
{
if (!$this->eansOdr->contains($ean)) {
$this->eansOdr[] = $ean;
$ean->setDetailsMultiOffer($this);
}
return $this;
}
public function clearEanOdr(): DetailsMultiOffer
{
foreach($this->eansOdr as $ean) {
// set the owning side to null (unless already changed)
if ($ean->getDetailsMultiOffer() === $this) {
$ean->setDetailsMultiOffer(null);
}
}
$this->setEansOdr(new ArrayCollection());
return $this;
}
public function getIsEansOdrActive(): ?bool
{
return $this->isEansOdrActive;
}
public function setIsEansOdrActive(bool $isEansOdrActive): self
{
$this->isEansOdrActive = $isEansOdrActive;
return $this;
}
public function getDescriptionModalityOdr(): ?string
{
return $this->descriptionModalityOdr;
}
public function setDescriptionModalityOdr(?string $descriptionModalityOdr): self
{
$this->descriptionModalityOdr = $descriptionModalityOdr;
return $this;
}
}