src/Entity/Participation/Participation.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Participation;
  3. use ApiPlatform\Core\Annotation\ApiProperty;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use App\Entity\Company\Company;
  6. use App\Entity\MediaObject\MediaParticipation;
  7. use App\Entity\Operation\Operation;
  8. use App\Entity\State;
  9. use App\Entity\User\User;
  10. use App\Repository\Participation\ParticipationRepository;
  11. use DateTime;
  12. use Doctrine\Common\Collections\ArrayCollection;
  13. use Doctrine\Common\Collections\Collection;
  14. use Doctrine\ORM\Mapping as ORM;
  15. use Gedmo\Timestampable\Traits\TimestampableEntity;
  16. use Ramsey\Uuid\Doctrine\UuidGenerator;
  17. use Symfony\Component\Serializer\Annotation\Groups;
  18. use Symfony\Component\Serializer\Annotation\SerializedName;
  19. use Symfony\Component\Validator\Constraints as Assert;
  20. /**
  21.  * @ORM\Entity(repositoryClass=ParticipationRepository::class)
  22.  *
  23.  * @ApiResource(
  24.  *     attributes={
  25.  *          "normalization_context"={"groups"={
  26.  *              "Participation:output",
  27.  *              "Participation:io",
  28.  *          }},
  29.  *          "denormalization_context"={"groups"={
  30.  *              "Participation:input",
  31.  *              "Participation:io",
  32.  *          }}
  33.  *      },
  34.  *     collectionOperations={},
  35.  *     itemOperations={
  36.  *          "get",
  37.  *          "put"
  38.  *      },
  39.  * )
  40.  *
  41.  * @ORM\InheritanceType("SINGLE_TABLE")
  42.  * @ORM\DiscriminatorColumn(name="discr", type="string")
  43.  * @ORM\DiscriminatorMap({
  44.  *     "coupon" = "Coupon",
  45.  *     "step" = "Step",
  46.  *     "refund" = "Refund",
  47.  *     "puntos" = "Puntos",
  48.  *     "draw" = "Draw",
  49.  *     "odr" = "Odr",
  50.  *     "multi" = "Multi",
  51.  * })
  52.  */
  53. abstract class Participation
  54. {
  55.     public const PARTICIPATION_TYPE = ['coupon''step''puntos''odr''multi'];
  56.     /**
  57.      * Hook timestampable behavior
  58.      * updates createdAt, updatedAt fields
  59.      */
  60.     use TimestampableEntity;
  61.     /**
  62.      * @ORM\Id
  63.      * @ORM\Column(type="uuid", unique=true)
  64.      * @ORM\GeneratedValue(strategy="CUSTOM")
  65.      * @ORM\CustomIdGenerator(class=UuidGenerator::class)
  66.      * @SerializedName("id")
  67.      * @ApiProperty(identifier=true)
  68.      * @Assert\Uuid()
  69.      * @Groups({
  70.      *     "Participation:output",
  71.      *     "ParticipationStep:output",
  72.      *     "ParticipationOdr:output",
  73.      *     "ParticipationMulti:output",
  74.      *     "ParticipationCoupon:output",
  75.      *     "ParticipationRefund:output",
  76.      *     "ParticipationPuntos:io",
  77.      *     "ParticipationDraw:io",
  78.      * })
  79.      */
  80.     protected $id;
  81.     /**
  82.      * @ORM\ManyToOne(targetEntity=State::class, inversedBy="participations", cascade={"persist"})
  83.      * @ORM\JoinColumn(nullable=false)
  84.      * @SerializedName("state")
  85.      * @Groups({
  86.      *     "Participation:io",
  87.      *     "ParticipationStep:io",
  88.      *     "ParticipationCoupon:output",
  89.      *     "confirm_participation",
  90.      *     "ParticipationPuntos:io",
  91.      *     "ParticipationDraw:io",
  92.      *     "ParticipationOdr:io",
  93.      *     "ParticipationMulti:io",
  94.      * })
  95.      */
  96.     protected $state;
  97.     /**
  98.      * @ORM\Column(type="string", length=255, nullable=true, name="edited_id")
  99.      * @Groups({
  100.      *     "Participation:io",
  101.      *     "confirm_participation",
  102.      *     "ParticipationOdr:io",
  103.      *     "ParticipationMulti:io",
  104.      * })
  105.      */
  106.     protected ?string $editedId;
  107.     /**
  108.      * @ORM\Column(type="string", length=255, nullable=true, name="token")
  109.      * @Groups({
  110.      *     "Participation:io",
  111.      *     "confirm_participation",
  112.      *     "ParticipationOdr:io",
  113.      *     "ParticipationMulti:io",
  114.      * })
  115.      */
  116.     protected ?string $token null;
  117.     /**
  118.      * @ORM\OneToMany(targetEntity=MediaParticipation::class, mappedBy="participation")
  119.      * @SerializedName("invoices")
  120.      * @Groups({
  121.      *     "Participation:io",
  122.      *     "ParticipationStep:io",
  123.      *     "ParticipationCoupon:io",
  124.      *     "ParticipationPuntos:io",
  125.      *     "ParticipationOdr:io",
  126.      *     "ParticipationMulti:io",
  127.      *     "get_participation_odrs_by_id",
  128.      * })
  129.      */
  130.     protected Collection $invoices;
  131.     /**
  132.      * @ORM\ManyToOne(targetEntity=User::class, inversedBy="participations")
  133.      * @Groups({
  134.      *     "Participation:io",
  135.      *     "ParticipationStep:io",
  136.      *     "ParticipationOdr:io",
  137.      *     "ParticipationMulti:io",
  138.      *     "ParticipationCoupon:io",
  139.      *     "ParticipationRefund:io",
  140.      *     "ParticipationPuntos:io",
  141.      *     "ParticipationDraw:io",
  142.      * })
  143.      * @Assert\NotBlank()
  144.      */
  145.     protected $user;
  146.     /**
  147.      * @ORM\ManyToMany(targetEntity=Operation::class, inversedBy="participations")
  148.      * @Groups({
  149.      *     "Participation:io",
  150.      *     "ParticipationStep:io",
  151.      *     "ParticipationOdr:io",
  152.      *     "ParticipationMulti:io",
  153.      *     "ParticipationCoupon:io",
  154.      *     "ParticipationRefund:io",
  155.      *     "ParticipationPuntos:io",
  156.      *     "ParticipationDraw:io",
  157.      *     "get_participation_multi_odr_by_user",
  158.      *     "get_participation_odrs_by_user",
  159.      *     "get_participation_odrs_by_id",
  160.      * })
  161.      * @Assert\NotBlank()
  162.      * @Assert\Count(
  163.      *     min="1",
  164.      *     max="12"
  165.      * )
  166.      * @Assert\Unique()
  167.      */
  168.     protected Collection $operations;
  169.     /**
  170.      * @ORM\ManyToOne(targetEntity=Company::class, inversedBy="participations")
  171.      * @ORM\JoinColumn(nullable=false)
  172.      */
  173.     private $company;
  174.     /**
  175.      * @ORM\OneToOne(targetEntity=ValidationExport::class, cascade={"persist", "remove"})
  176.      *
  177.      * @SerializedName("validation_export")
  178.      * @Groups({
  179.      *     "ParticipationMulti:io",
  180.      *     "ParticipationOdr:io",
  181.      *     "ParticipationStep:io",
  182.      *     "get_participation_multi_odrs_by_id",
  183.      *     "get_reparticipation_multi_odrs_by_id",
  184.      *     "get_participation_odrs_by_id",
  185.      *     "get_reparticipation_odrs_by_id",
  186.      *     "get_participation-steps_by_user",
  187.      * })
  188.      */
  189.     private ?ValidationExport $validationExport;
  190.     /**
  191.      * @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"}, nullable=true)
  192.      * @Groups({
  193.      *     "ParticipationMulti:io",
  194.      *     "ParticipationOdr:io",
  195.      * })
  196.      */
  197.     private ?\DateTimeInterface $updateConformityAt;
  198.     /**
  199.      * @ORM\Column(type="boolean", options={"default": 0})
  200.      */
  201.     private bool $restatementParticipation false;
  202.     /**
  203.      * @var string|null
  204.      * @ORM\Column(type="string", nullable=true)
  205.      * @SerializedName("financial_status")
  206.      * @Groups({
  207.      *     "ParticipationMulti:io",
  208.      *     "get_participation_multi_odrs_by_user",
  209.      *     "get_participation_multi_odrs_by_id",
  210.      *     "get_reparticipation_multi_odrs_by_id",
  211.      *     "ParticipationOdr:io",
  212.      *     "get_odrs_by_user_department",
  213.      *     "get_participation_odrs_by_user",
  214.      *     "get_participation_odrs_by_id",
  215.      *     "get_reparticipation_odrs_by_id",
  216.      * })
  217.      */
  218.     private ?string $financialStatus null;
  219.     /**
  220.      * @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"}, nullable=true)
  221.      * @SerializedName("financial_date")
  222.      * @Groups({
  223.      *     "ParticipationMulti:io",
  224.      *     "get_participation_multi_odrs_by_user",
  225.      *     "get_participation_multi_odrs_by_id",
  226.      *     "get_reparticipation_multi_odrs_by_id",
  227.      *     "ParticipationOdr:io",
  228.      *     "get_odrs_by_user_department",
  229.      *     "get_participation_odrs_by_user",
  230.      *     "get_participation_odrs_by_id",
  231.      *     "get_reparticipation_odrs_by_id",
  232.      * })
  233.      */
  234.     private ?\DateTimeInterface $financialDate;
  235.     /**
  236.      * @ORM\Column(name="financial_amount", type="float", nullable=true)
  237.      * @SerializedName("financial_amount")
  238.      * @Groups({
  239.      *     "ParticipationMulti:io",
  240.      *     "get_participation_multi_odrs_by_user",
  241.      *     "get_participation_multi_odrs_by_id",
  242.      *     "get_reparticipation_multi_odrs_by_id",
  243.      *     "ParticipationOdr:io",
  244.      *     "get_odrs_by_user_department",
  245.      *     "get_participation_odrs_by_user",
  246.      *     "get_participation_odrs_by_id",
  247.      *     "get_reparticipation_odrs_by_id",
  248.      * })
  249.      */
  250.     private ?float $financialAmount null;
  251.     public function __construct()
  252.     {
  253.         $this->invoices = new ArrayCollection();
  254.         $this->operations = new ArrayCollection();
  255.     }
  256.     public function getId(): ?string
  257.     {
  258.         return $this->id;
  259.     }
  260.     /**
  261.      * @return DateTime
  262.      * @Groups({
  263.      *     "ParticipationStep:io",
  264.      *     "ParticipationOdr:io",
  265.      *     "ParticipationMulti:io",
  266.      *     "get_participation_odrs_by_user",
  267.      * })
  268.      * @SerializedName("created_at")
  269.      */
  270.     public function getCreatedAt()
  271.     {
  272.         return $this->createdAt;
  273.     }
  274.     /**
  275.      * @return DateTime
  276.      * @SerializedName("updated_at")
  277.      */
  278.     public function getUpdatedAt()
  279.     {
  280.         return $this->updatedAt;
  281.     }
  282.     /**
  283.      * @return mixed
  284.      */
  285.     public function getState(): ?State
  286.     {
  287.         return $this->state;
  288.     }
  289.     /**
  290.      * @param State $state
  291.      *
  292.      * @return Participation
  293.      */
  294.     public function setState(State $state)
  295.     {
  296.         $this->state $state;
  297.         return $this;
  298.     }
  299.     public function getToken(): ?string
  300.     {
  301.         return $this->token;
  302.     }
  303.     /**
  304.      * @param $token
  305.      * @return Participation
  306.      */
  307.     public function setToken($token): Participation
  308.     {
  309.         $this->token $token;
  310.         return $this;
  311.     }
  312.     public function getEditedId(): ?string
  313.     {
  314.         return $this->editedId;
  315.     }
  316.     /**
  317.      * @param $editedId
  318.      * @return Participation
  319.      */
  320.     public function setEditedId($editedId): Participation
  321.     {
  322.         $this->editedId $editedId;
  323.         return $this;
  324.     }
  325.     /**
  326.      * @return Collection|MediaParticipation[]
  327.      */
  328.     public function getInvoices(): Collection
  329.     {
  330.         return $this->invoices;
  331.     }
  332.     public function addInvoice(MediaParticipation $invoice): self
  333.     {
  334.         if (!$this->invoices->contains($invoice)) {
  335.             $this->invoices[] = $invoice;
  336.         }
  337.         return $this;
  338.     }
  339.     public function removeInvoice(MediaParticipation $invoice): self
  340.     {
  341.         $this->invoices->removeElement($invoice);
  342.         return $this;
  343.     }
  344.     public function getUser(): ?User
  345.     {
  346.         return $this->user;
  347.     }
  348.     public function setUser(?User $user): self
  349.     {
  350.         $this->user $user;
  351.         return $this;
  352.     }
  353.     /**
  354.      * @return Collection|Operation[]
  355.      */
  356.     public function getOperations(): Collection
  357.     {
  358.         return $this->operations;
  359.     }
  360.     public function addOperation(Operation $operation): self
  361.     {
  362.         if (!$this->operations->contains($operation)) {
  363.             $this->operations[] = $operation;
  364.         }
  365.         return $this;
  366.     }
  367.     public function removeOperation(Operation $operation): self
  368.     {
  369.         $this->operations->removeElement($operation);
  370.         return $this;
  371.     }
  372.     public function getCompany(): ?Company
  373.     {
  374.         return $this->company;
  375.     }
  376.     public function setCompany(?Company $company): self
  377.     {
  378.         $this->company $company;
  379.         return $this;
  380.     }
  381.     /**
  382.      * Returns createdAt.
  383.      * @SerializedName("created_at")
  384.      * @Groups({
  385.      *     "Participation:output",
  386.      *     "ParticipationStep:output",
  387.      *     "ParticipationOdr:output",
  388.      *     "ParticipationMulti:output",
  389.      *     "ParticipationCoupon:output",
  390.      *     "ParticipationRefund:output",
  391.      *     "ParticipationPuntos:io",
  392.      * })
  393.      *
  394.      * @return \DateTime
  395.      */
  396.     public function getSerializedCreatedAt()
  397.     {
  398.         return $this->getCreatedAt();
  399.     }
  400.     public function getStateLabel(): ?string
  401.     {
  402.         return $this->getState()->getLabel();
  403.     }
  404.     public function getValidationExport(): ?ValidationExport
  405.     {
  406.         return $this->validationExport;
  407.     }
  408.     public function setValidationExport(?ValidationExport $validationExport): self
  409.     {
  410.         $this->validationExport $validationExport;
  411.         return $this;
  412.     }
  413.     public function getUpdateConformityAt(): ?\DateTimeInterface
  414.     {
  415.         return $this->updateConformityAt;
  416.     }
  417.     public function setUpdateConformityAt(?\DateTimeInterface $updateConformityAt): Participation
  418.     {
  419.         $this->updateConformityAt $updateConformityAt;
  420.         return $this;
  421.     }
  422.     public function getRestatementParticipation(): bool
  423.     {
  424.         return (bool) $this->restatementParticipation;
  425.     }
  426.     public function setRestatementParticipation(bool $restatementParticipation): self
  427.     {
  428.         $this->restatementParticipation $restatementParticipation;
  429.         return $this;
  430.     }
  431.     public function getFinancialStatus(): ?string
  432.     {
  433.         return $this->financialStatus;
  434.     }
  435.     public function setFinancialStatus(?string $financialStatus): Participation
  436.     {
  437.         $this->financialStatus $financialStatus;
  438.         return $this;
  439.     }
  440.     public function getFinancialDate(): ?\DateTimeInterface
  441.     {
  442.         return $this->financialDate;
  443.     }
  444.     public function setFinancialDate(?\DateTimeInterface $financialDate): Participation
  445.     {
  446.         $this->financialDate $financialDate;
  447.         return $this;
  448.     }
  449.     public function getFinancialAmount() : ?float
  450.     {
  451.         return $this->financialAmount;
  452.     }
  453.     public function setFinancialAmount(?float $financialAmount): Participation
  454.     {
  455.         $this->financialAmount $financialAmount;
  456.         return $this;
  457.     }
  458. }