<?php
namespace App\Entity\Ean;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Details\Operation\DetailsMultiOffer;
use App\Entity\Details\Operation\DetailsOperation;
use App\Repository\Ean\EanRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Ramsey\Uuid\Doctrine\UuidGenerator;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
use App\Entity\Ean\Participation\EanParticipation;
/**
* @ApiResource(
* attributes={
* "normalization_context"={
* "groups"={
* "Ean:output",
* "Ean:io"
* },
* },
* "denormalization_context"={
* "groups"={
* "Ean:output",
* "Ean:io"
* },
* }
* },
* collectionOperations={
* "get"={
* "method"="GET",
* "access_control"="is_granted('ROLE_USER')",
* },
* },
* itemOperations={
* "get"={
* "method"="GET",
* "access_control"="is_granted('ROLE_USER')",
* },
* }
* )
* @ORM\Entity(repositoryClass=EanRepository::class)
*/
class Ean
{
/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidGenerator::class)
* @SerializedName("id")
* @ApiProperty(identifier=true)
* @Groups({
* "Ean:output",
* "OperationStep:output",
* "OperationPuntos:output",
* "OperationOdr:output",
* "DetailsStep:output",
* "DetailsPuntos:output",
* "DetailsOdr:output",
* "ParticipationOdr:io",
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* "get_all_public_steps",
* "get_all_public_odrs",
* "get_steps_by_user_department",
* "get_participation_odrs_by_user",
* "get_participation_odrs_by_id",
* })
*/
private string $id;
/**
* @var string
*
* @ORM\Column(name="code", type="string", nullable=false)
* @SerializedName("code")
* @Groups({
* "Ean:output",
* "OperationStep:output",
* "OperationPuntos:output",
* "OperationOdr:output",
* "DetailsStep:output",
* "DetailsPuntos:output",
* "DetailsOdr:output",
* "ParticipationStep:output",
* "ParticipationOdr:output",
* "ParticipationMulti:io",
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* "get_all_public_steps",
* "get_all_public_odrs",
* "get_steps_by_user_department",
* "get_participation_odrs_by_user",
* "get_participation_odrs_by_id",
* })
*/
private string $code;
/**
* @var string
*
* @ORM\Column(name="label", type="string", nullable=true)
* @SerializedName("label")
* @Groups({
* "Ean:output",
* "OperationOdr:output",
* "ParticipationOdr:io",
* "ParticipationMulti:io",
* "DetailsOdr:output",
* "get_all_public_odrs",
* "get_steps_by_user_department",
* "get_participation_odrs_by_user",
* "get_participation_odrs_by_id",
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private ?string $label = null;
/**
* @var integer
*
* @ORM\Column(name="quantity", type="integer", nullable=true)
* @SerializedName("quantity")
* @Groups({
* "Ean:output",
* "OperationStep:output",
* "OperationPuntos:output",
* "OperationOdr:output",
* "DetailsStep:output",
* "DetailsPuntos:output",
* "DetailsOdr:output",
* "get_all_public_steps",
* "get_all_public_odrs",
* "ParticipationStep:io",
* "get_steps_by_user_department",
* })
*/
private $quantity;
/**
* @ORM\Column(name="amount", type="float", nullable=true)
* @SerializedName("amount")
* @Groups({
* "Ean:output",
* "OperationStep:output",
* "OperationPuntos:output",
* "OperationOdr:output",
* "DetailsStep:output",
* "DetailsPuntos:output",
* "DetailsOdr:output",
* "get_all_public_steps",
* "get_all_public_odrs",
* "ParticipationStep:io",
* "ParticipationOdr:io",
* "get_steps_by_user_department",
* "get_participation_odrs_by_user",
* "get_participation_odrs_by_id",
* })
*/
private $amount;
/**
* @ORM\ManyToOne(targetEntity=DetailsOperation::class, inversedBy="eans")
* @ORM\JoinColumn(nullable=true)
*/
private ?DetailsOperation $detailsOperation;
/**
* @ORM\OneToMany(targetEntity=EanParticipation::class, mappedBy="ean")
*/
private $eanParticipations;
/**
* @ORM\ManyToOne(targetEntity=DetailsMultiOffer::class, inversedBy="eans")
* @Groups({
* "DetailsMultiOffer:io",
* "OperationMultiOffer:io",
* })
*/
private $detailsMultiOffer;
public function __construct()
{
//$this->participationStep = new ArrayCollection();
$this->eanParticipations = new ArrayCollection();
}
/**
* @return string
*/
public function getId() : string
{
return $this->id;
}
public function getDetailsOperation(): ?DetailsOperation
{
return $this->detailsOperation;
}
public function setDetailsOperation(?DetailsOperation $detailsOperation): self
{
$this->detailsOperation = $detailsOperation;
return $this;
}
/**
* @return string
*/
public function getCode() : string
{
return $this->code;
}
/**
* @param string $code
*
* @return Ean
*/
public function setCode(string $code) : Ean
{
$this->code = $code;
return $this;
}
/**
* @return string
*/
public function getLabel() : ?string
{
return $this->label;
}
/**
* @param string $label
*
* @return Ean
*/
public function setLabel(string $label) : Ean
{
$this->label = $label;
return $this;
}
/**
* @return Collection|EanParticipation[]
*/
public function getEanParticipations(): Collection
{
return $this->eanParticipations;
}
public function addEanStep(EanParticipation $eanParticipations): self
{
if (!$this->eanParticipations->contains($eanParticipations)) {
$this->eanParticipations[] = $eanParticipations;
$eanParticipations->setEan($this);
}
return $this;
}
public function removeEanStep(EanParticipation $eanParticipations): self
{
if ($this->eanParticipations->removeElement($eanParticipations)) {
// set the owning side to null (unless already changed)
if ($eanParticipations->getEan() === $this) {
$eanParticipations->setEan(null);
}
}
return $this;
}
public function getQuantity() : ?int
{
return $this->quantity;
}
public function setQuantity(?int $quantity) : Ean
{
$this->quantity = $quantity;
return $this;
}
public function getAmount()
{
return $this->amount;
}
public function setAmount($amount)
{
$this->amount = $amount;
return $this;
}
public function getDetailsMultiOffer(): ?DetailsMultiOffer
{
return $this->detailsMultiOffer;
}
public function setDetailsMultiOffer(?DetailsMultiOffer $detailsMultiOffer): self
{
$this->detailsMultiOffer = $detailsMultiOffer;
return $this;
}
}