src/Entity/Participation/Multi.php line 133

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Participation;
  3. use ApiPlatform\Core\Annotation\ApiResource;
  4. use App\Controller\Api\Participation\Multi\ConfirmationParticipationMultiOdrByUser;
  5. use App\Controller\Api\Participation\Multi\CreateParticipationMultiOdrByUser;
  6. use App\Controller\Api\Participation\Multi\GetNbParticipationByOperationId;
  7. use App\Controller\Api\Participation\Multi\GetParticipationMultiOdrById;
  8. use App\Controller\Api\Participation\Multi\GetParticipationMultiOdrByUser;
  9. use App\Controller\Api\Participation\Multi\GetParticipationMultiOdrByUserByOperation;
  10. use App\Controller\Api\Participation\Multi\GetReParticipationMultiOdrById;
  11. use App\Controller\Api\Participation\Multi\UpdateBankInformationParticipationMultiOdrById;
  12. use App\Dto\ParticipationStatus;
  13. use App\Entity\Details\Participation\DetailsParticipationMultiOdr;
  14. use App\Entity\Ean\Participation\EanOdr;
  15. use App\Entity\Ean\Participation\EanParticipation;
  16. use App\Repository\Participation\MultiRepository;
  17. use DateTime;
  18. use DateTimeInterface;
  19. use Doctrine\Common\Collections\ArrayCollection;
  20. use Doctrine\Common\Collections\Collection;
  21. use Doctrine\ORM\Mapping as ORM;
  22. use JMS\Serializer\Annotation\ExclusionPolicy;
  23. use Symfony\Component\Serializer\Annotation\Groups;
  24. use Symfony\Component\Serializer\Annotation\SerializedName;
  25. use Symfony\Component\Validator\Constraints as Assert;
  26. /**
  27.  * @ORM\Entity(repositoryClass=MultiRepository::class)
  28.  * @ExclusionPolicy("all")
  29.  * @ApiResource(
  30.  *     messenger=true,
  31.  *     shortName="participation-multi",
  32.  *     attributes={
  33.  *          "force_eager"=false,
  34.  *          "normalization_context"={
  35.  *              "groups"={
  36.  *                  "ParticipationMulti:output",
  37.  *                  "ParticipationMulti:io",
  38.  *                  "get_participation_multi_odrs_by_user",
  39.  *                  "get_participation_multi_odrs_by_id",
  40.  *               },
  41.  *              "enable_max_depth"=true
  42.  *          },
  43.  *          "denormalization_context"={
  44.  *              "groups"={
  45.  *                  "ParticipationMulti:input",
  46.  *                  "ParticipationMulti:io",
  47.  *              },
  48.  *              "enable_max_depth"=true
  49.  *          }
  50.  *      },
  51.  *     collectionOperations={
  52.  *          "get",
  53.  *          "post"={
  54.  *              "method"="POST",
  55.  *              "access_control"="is_granted('ROLE_USER')"
  56.  *          },
  57.  *          "get-by-user"={
  58.  *              "method"="GET",
  59.  *              "path"="/participation-multi-odr/user",
  60.  *              "access_control"="is_granted('ROLE_USER')",
  61.  *              "validation_groups"={"get_participation_multi_odrs_by_user"},
  62.  *              "controller"=GetParticipationMultiOdrByUser::class,
  63.  *              "defaults"={"_api_receive"=false},
  64.  *          },
  65.  *          "check-participation-multi-odr-by-user-operation"={
  66.  *              "method"="GET",
  67.  *              "path"="/participation-multi-odr/user/operation/{operationId}",
  68.  *              "access_control"="is_granted('ROLE_USER')",
  69.  *              "validation_groups"={"get_participation_multi_odr_by_user"},
  70.  *              "controller"=GetParticipationMultiOdrByUserByOperation::class,
  71.  *              "defaults"={"_api_receive"=false},
  72.  *          },
  73.  *          "create-participation-multi-odr-post"={
  74.  *              "method"="POST",
  75.  *              "path"="/participation-multi-odr/create-participation",
  76.  *              "access_control"="is_granted('ROLE_USER')",
  77.  *              "controller"=CreateParticipationMultiOdrByUser::class,
  78.  *              "defaults"={"_api_receive"=false},
  79.  *          },
  80.  *          "confirmation-participation-multi-odr-post"={
  81.  *              "method"="POST",
  82.  *              "path"="/participation-multi-odr/smp/{participationId}/{userId}",
  83.  *              "access_control"="is_granted('ROLE_USER')",
  84.  *              "controller"=ConfirmationParticipationMultiOdrByUser::class,
  85.  *              "defaults"={"_api_receive"=false},
  86.  *          },
  87.  *     },
  88.  *     itemOperations={
  89.  *          "get",
  90.  *          "get-participation-multi-odr-by-id"={
  91.  *              "method"="GET",
  92.  *              "path"="/participation-multi-odr/{id}",
  93.  *              "access_control"="is_granted('ROLE_USER')",
  94.  *              "validation_groups"={"get_participation_multi_odr_by_id"},
  95.  *              "controller"=GetParticipationMultiOdrById::class,
  96.  *              "defaults"={"_api_receive"=false},
  97.  *          },
  98.  *          "get-reparticipation"={
  99.  *              "method"="GET",
  100.  *              "path"="/participation-multi-odr/reparticipation/{id}",
  101.  *              "access_control"="is_granted('ROLE_USER')",
  102.  *              "controller"=GetReParticipationMultiOdrById::class,
  103.  *              "defaults"={"_api_receive"=false},
  104.  *          },
  105.  *          "put"={
  106.  *              "validation_groups"={"Default", "Edit"}
  107.  *          },
  108.  *          "put-participation"={
  109.  *              "method"="PUT",
  110.  *              "path"="/participation-multi-odr/update-participation/{participationId}",
  111.  *              "access_control"="is_granted('ROLE_USER')",
  112.  *              "controller"=UpdateBankInformationParticipationMultiOdrById::class,
  113.  *              "defaults"={"_api_receive"=false},
  114.  *          },
  115.  *          "burn-multi"={
  116.  *             "method"="PUT",
  117.  *             "input"=ParticipationStatus::class,
  118.  *             "path"="/participation-multi/burn/{id}",
  119.  *         },
  120.  *          "public-get-nbr-participation-multi"={
  121.  *              "method"="GET",
  122.  *              "access_control"="is_granted('ROLE_PUBLIC')",
  123.  *              "path"="/public/get-nb-participation-multi/{id}",
  124.  *              "controller"=GetNbParticipationByOperationId::class,
  125.  *              "defaults"={"_api_receive"=false},
  126.  *         }
  127.  *     },
  128.  * )
  129.  */
  130. class Multi extends Participation
  131. {
  132.     const CHANNEL_EMAIL "email";
  133.     const CHANNEL_PRINT "print";
  134.     const CHANNELS = [
  135.         self::CHANNEL_EMAIL,
  136.         self::CHANNEL_PRINT
  137.     ];
  138.     //status
  139.     const STATUS_NEW "new";
  140.     const STATUS_SENT_BY_EMAIL "sentByEmail";
  141.     const STATUS_WAIT_FOR_PRINT "waitForPrint";
  142.     const STATUS_PRINTED "printed";
  143.     const STATUS_UNLOCK_PRINT "unlockPrinted";
  144.     // all status list
  145.     const STATUS = [
  146.         self::STATUS_NEW,
  147.         self::STATUS_PRINTED,
  148.         self::STATUS_SENT_BY_EMAIL,
  149.         self::STATUS_WAIT_FOR_PRINT,
  150.         self::STATUS_UNLOCK_PRINT,
  151.     ];
  152.     //status that mark multi coupon as printed
  153.     const PRINTED_STATUS = [
  154.         self::STATUS_SENT_BY_EMAIL,
  155.         self::STATUS_WAIT_FOR_PRINT,
  156.         self::STATUS_PRINTED,
  157.     ];
  158.     const CHANNEL_CASH_BACK "cash-back";
  159.     const PAYMENT_TYPE_IBAN "transfer";
  160.     const PAYMENT_TYPE_PAYPAL "paypal";
  161.     /**
  162.      * @ORM\Column(name="code", type="string", nullable=true)
  163.      * @SerializedName("code")
  164.      * @Groups({
  165.      *     "ParticipationMulti:io",
  166.      *     "get_participation_multi_odrs_by_user",
  167.      *     "get_participation_multi_odrs_by_id",
  168.      *     "get_reparticipation_multi_odrs_by_id",
  169.      * })
  170.      */
  171.     private ?string $code null;
  172.     /**
  173.      * @ORM\Column(type="string", length=255, nullable=true)
  174.      * @Groups({"ParticipationMulti:io"})
  175.      */
  176.     private ?string $printUrl null;
  177.     /**
  178.      * @ORM\Column(type="string", length=10)
  179.      * @Groups({"ParticipationMulti:io"})
  180.      */
  181.     private ?string $emitterCode null;
  182.     /**
  183.      * @ORM\Column(type="string", length=10)
  184.      * @Groups({"ParticipationMulti:io"})
  185.      * @Assert\Choice(choices=self::CHANNELS, message="Choose a valid channel.")
  186.      */
  187.     private ?string $channel null;
  188.     /**
  189.      * @ORM\Column(type="string", length=15)
  190.      * @Groups({"ParticipationMulti:io"})
  191.      */
  192.     private ?string $status null;
  193.     public function getPrintUrl(): ?string
  194.     {
  195.         return $this->printUrl;
  196.     }
  197.     public function setPrintUrl($printUrl)
  198.     {
  199.         $this->printUrl $printUrl;
  200.         return $this;
  201.     }
  202.     public function getEmitterCode(): ?string
  203.     {
  204.         return $this->emitterCode;
  205.     }
  206.     public function setEmitterCode(string $emitterCode): self
  207.     {
  208.         $this->emitterCode $emitterCode;
  209.         return $this;
  210.     }
  211.     public function getChannel(): ?string
  212.     {
  213.         return $this->channel;
  214.     }
  215.     public function setChannel(?string $channel): self
  216.     {
  217.         $this->channel $channel;
  218.         return $this;
  219.     }
  220.     public function getStatus(): ?string
  221.     {
  222.         return $this->status;
  223.     }
  224.     public function setStatus(?string $status): self
  225.     {
  226.         $this->status $status;
  227.         return $this;
  228.     }
  229.     /**
  230.      * @var Collection<EanParticipation>|EanParticipation[]
  231.      * @ORM\OneToMany(targetEntity=EanOdr::class, mappedBy="participation")
  232.      * @SerializedName("ean_odrs")
  233.      * @Groups({
  234.      *     "ParticipationMulti:io",
  235.      *     "get_participation_multi_odrs_by_user",
  236.      *     "get_participation_multi_odrs_by_id",
  237.      *     "get_reparticipation_multi_odrs_by_id",
  238.      * })
  239.      */
  240.     private $eanParticipations;
  241.     /**
  242.      * @ORM\Column(name="amount", type="float")
  243.      * @SerializedName("amount")
  244.      * @Groups({
  245.      *     "ParticipationMulti:io",
  246.      *     "get_participation_multi_odrs_by_user",
  247.      *     "get_participation_multi_odrs_by_id",
  248.      *     "get_reparticipation_multi_odrs_by_id",
  249.      * })
  250.      */
  251.     private ?float $amount null;
  252.     /**
  253.      * @ORM\OneToOne(targetEntity=DetailsParticipationMultiOdr::class, mappedBy="participation", cascade={"persist", "remove"})
  254.      * @SerializedName("details_participation_odr")
  255.      * @Groups({
  256.      *     "ParticipationMulti:io",
  257.      *     "get_participation_multi_odrs_by_user",
  258.      *     "get_participation_multi_odrs_by_id",
  259.      *     "get_reparticipation_multi_odrs_by_id",
  260.      * })
  261.      */
  262.     private ?DetailsParticipationMultiOdr $details null;
  263.     /**
  264.      * @var string|null
  265.      * @ORM\Column(type="string", nullable=true)
  266.      * @SerializedName("iban")
  267.      * @Groups({
  268.      *     "ParticipationMulti:io",
  269.      *     "get_participation_multi_odrs_by_user",
  270.      *     "get_participation_multi_odrs_by_id",
  271.      *     "get_reparticipation_multi_odrs_by_id",
  272.      * })
  273.      */
  274.     private ?string $iban null;
  275.     /**
  276.      * @var string|null
  277.      * @ORM\Column(type="string", nullable=true)
  278.      * @SerializedName("bic")
  279.      * @Groups({
  280.      *     "ParticipationMulti:io",
  281.      *     "get_participation_multi_odrs_by_user",
  282.      *     "get_participation_multi_odrs_by_id",
  283.      *     "get_reparticipation_multi_odrs_by_id",
  284.      * })
  285.      * @Assert\Bic()
  286.      */
  287.     private ?string $bic null;
  288.     /**
  289.      * @ORM\Column(type="string", length=180, nullable=true)
  290.      * @SerializedName("paypal")
  291.      * @Groups({
  292.      *     "ParticipationMulti:io",
  293.      *     "get_participation_multi_odrs_by_user",
  294.      *     "get_participation_multi_odrs_by_id",
  295.      *     "get_reparticipation_multi_odrs_by_id",
  296.      * })
  297.      */
  298.     private ?string $paypal null;
  299.     /**
  300.      * @var string|null
  301.      * @ORM\Column(type="string", nullable=true)
  302.      * @SerializedName("id_billy")
  303.      * @Groups({
  304.      *     "ParticipationMulti:io",
  305.      *     "get_participation_multi_odrs_by_user",
  306.      *     "get_participation_multi_odrs_by_id",
  307.      *     "get_reparticipation_multi_odrs_by_id",
  308.      * })
  309.      */
  310.     private ?string $idBilly null;
  311.     /**
  312.      * @ORM\Column(type="boolean", options={"default": 0})
  313.      */
  314.     private bool $mailSuccess false;
  315.     public function __construct()
  316.     {
  317.         parent::__construct();
  318.         $this->eanParticipations = new ArrayCollection();
  319.     }
  320.     /**
  321.      * @return string|null
  322.      */
  323.     public function getPaypal(): ?string
  324.     {
  325.         return $this->paypal;
  326.     }
  327.     /**
  328.      * @param string|null $paypal
  329.      * @return Multi
  330.      */
  331.     public function setPaypal(?string $paypal): Multi
  332.     {
  333.         $this->paypal $paypal;
  334.         return $this;
  335.     }
  336.     public function getCode(): ?string
  337.     {
  338.         return $this->code;
  339.     }
  340.     public function setCode(?string $code)
  341.     {
  342.         $this->code $code;
  343.         return $this;
  344.     }
  345.     /**
  346.      * @param array $filter
  347.      * @return int
  348.      */
  349.     public function getEanParticipationsQuantityByStatus(array $filter = []): int
  350.     {
  351.         $eanParts $this->eanParticipations ?? [];
  352.         if(!$eanParts instanceof Collection) {
  353.             $eanParts = new ArrayCollection($eanParts);
  354.         }
  355.         if( !empty($filter) ) {
  356.             $eanParts =  $eanParts->filter(function(EanParticipation $eanParticipation) use ($filter) {
  357.                 return in_array($eanParticipation->getBarcodeStatus(), $filter);
  358.             });
  359.         }
  360.         $quantity 0;
  361.         foreach ($eanParts as $eanParticipation) {
  362.             $quantity += ((int)$eanParticipation->getQuantity() * (int)$eanParticipation->getEan()->getQuantity());
  363.         }
  364.         return $quantity;
  365.     }
  366.     /**
  367.      * @return Collection|EanOdr[]
  368.      */
  369.     public function getEanParticipations(): ?Collection
  370.     {
  371.         return $this->eanParticipations;
  372.     }
  373.     public function addEanParticipations(EanOdr $eanOdr): self
  374.     {
  375.         if (!$this->eanParticipations->contains($eanOdr)) {
  376.             $this->eanParticipations[] = $eanOdr;
  377.             $eanOdr->setParticipation($this);
  378.         }
  379.         return $this;
  380.     }
  381.     public function removeEanParticipations(EanOdr $eanOdr): self
  382.     {
  383.         if ($this->eanParticipations->removeElement($eanOdr)) {
  384.             // set the owning side to null (unless already changed)
  385.             if ($eanOdr->getParticipation() === $this) {
  386.                 $eanOdr->setParticipation(null);
  387.             }
  388.         }
  389.         return $this;
  390.     }
  391.     public function getDetails(): ?DetailsParticipationMultiOdr
  392.     {
  393.         return $this->details;
  394.     }
  395.     public function setDetails(?DetailsParticipationMultiOdr $details): self
  396.     {
  397.         $this->details $details;
  398.         return $this;
  399.     }
  400.     /**
  401.      * @return float|null
  402.      */
  403.     public function getAmount() : ?float
  404.     {
  405.         return $this->amount;
  406.     }
  407.     /**
  408.      * @param float|null $amount
  409.      *
  410.      * @return Multi
  411.      */
  412.     public function setAmount(?float $amount) : Multi
  413.     {
  414.         $this->amount $amount;
  415.         return $this;
  416.     }
  417.     /**
  418.      * @return string
  419.      */
  420.     public function getIban(): ?string
  421.     {
  422.         return $this->iban;
  423.     }
  424.     /**
  425.      * @param string|null $iban
  426.      * @return Multi
  427.      */
  428.     public function setIban(?string $iban): Multi
  429.     {
  430.         $this->iban $iban;
  431.         return $this;
  432.     }
  433.     /**
  434.      * @return string
  435.      */
  436.     public function getBic(): ?string
  437.     {
  438.         return $this->bic;
  439.     }
  440.     /**
  441.      * @param string|null $bic
  442.      * @return Multi
  443.      */
  444.     public function setBic(?string $bic): Multi
  445.     {
  446.         $this->bic $bic;
  447.         return $this;
  448.     }
  449.     /**
  450.      * @return string
  451.      */
  452.     public function getIdBilly(): ?string
  453.     {
  454.         return $this->idBilly;
  455.     }
  456.     /**
  457.      * @param string|null $idBilly
  458.      * @return Multi
  459.      */
  460.     public function setIdBilly(?string $idBilly): Multi
  461.     {
  462.         $this->idBilly $idBilly;
  463.         return $this;
  464.     }
  465.     public function getApiCode(): ?string
  466.     {
  467.         return $this->getValidationExport() instanceof ValidationExport $this->getValidationExport()->getAPIParticpationId() : null;
  468.     }
  469.     public function getMailSuccess(): bool
  470.     {
  471.         return (bool) $this->mailSuccess;
  472.     }
  473.     public function setMailSuccess(bool $mailSuccess): self
  474.     {
  475.         $this->mailSuccess $mailSuccess;
  476.         return $this;
  477.     }
  478. }