src/Entity/CampaignSchedule.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Serializer\Filter\PropertyFilter;
  8. use App\Repository\CampaignScheduleRepository;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use Doctrine\Common\Collections\Collection;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Gedmo\Timestampable\Traits\TimestampableEntity;
  13. use Symfony\Component\Serializer\Annotation\Groups;
  14. /**
  15.  * @ORM\Entity(repositoryClass=CampaignScheduleRepository::class)
  16.  * @ORM\HasLifecycleCallbacks()
  17.  */
  18. #[ApiResource(
  19.     normalizationContext: ['groups' => ['campaignSchedule:read']],
  20.     denormalizationContext: ['allow_extra_attributes' => true'groups' => ['campaignSchedule:write']],
  21.     attributes: ['security' => "is_granted('ROLE_USER')"],
  22.     collectionOperations: ['get''post' => ['security' => "is_granted('ROLE_ADMIN')"]],
  23.     itemOperations: ['get''put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"], 'delete' => ['security' => "is_granted('ROLE_ADMIN')"]],
  24. )]
  25. #[ApiFilter(PropertyFilter::class)]
  26. class CampaignSchedule
  27. {
  28.     use TimestampableEntity;
  29.     /**
  30.      * @ORM\Id
  31.      * @ORM\GeneratedValue
  32.      * @ORM\Column(type="integer")
  33.      */
  34.     private $id;
  35.     /**
  36.      * @ORM\ManyToOne(targetEntity=PinpointCampaign::class, inversedBy="campaignSchedules")
  37.      * @ORM\JoinColumn(nullable=false)
  38.      * @Groups({"campaignSchedule:read","campaignSchedule:write"})
  39.      */
  40.     #[ApiFilter(SearchFilter::class, strategySearchFilter::STRATEGY_EXACT)]
  41.     private $pinpointCampaign;
  42.     /**
  43.      * @ORM\Column(type="datetime_immutable")
  44.      * @Groups({"campaignSchedule:read","campaignSchedule:write"})
  45.      */
  46.     private $scheduledAt;
  47.     /**
  48.      * @ORM\Column(type="boolean")
  49.      * @Groups({"campaignSchedule:read","campaignSchedule:write"})
  50.      */
  51.     private $isCompleted;
  52.     /**
  53.      * @ORM\OneToMany(targetEntity=ScheduleRecipients::class, mappedBy="campaignSchedule", orphanRemoval=true, cascade={"persist" })
  54.      * @Groups({"campaignSchedule:read","campaignSchedule:write"})
  55.      */
  56.     private $scheduleRecipients;
  57.     public function __construct()
  58.     {
  59.         $this->scheduleRecipients = new ArrayCollection();
  60.     }
  61.     public function getId(): ?int
  62.     {
  63.         return $this->id;
  64.     }
  65.     public function getPinpointCampaign(): ?PinpointCampaign
  66.     {
  67.         return $this->pinpointCampaign;
  68.     }
  69.     public function setPinpointCampaign(?PinpointCampaign $pinpointCampaign): self
  70.     {
  71.         $this->pinpointCampaign $pinpointCampaign;
  72.         return $this;
  73.     }
  74.     public function getScheduledAt(): ?\DateTimeImmutable
  75.     {
  76.         return $this->scheduledAt;
  77.     }
  78.     public function setScheduledAt(\DateTimeImmutable $scheduledAt): self
  79.     {
  80.         $this->scheduledAt $scheduledAt;
  81.         return $this;
  82.     }
  83.     public function getIsCompleted(): ?bool
  84.     {
  85.         return $this->isCompleted;
  86.     }
  87.     public function setIsCompleted(bool $isCompleted): self
  88.     {
  89.         $this->isCompleted $isCompleted;
  90.         return $this;
  91.     }
  92.     /**
  93.      * @return Collection<int, ScheduleRecipients>
  94.      */
  95.     public function getScheduleRecipients(): Collection
  96.     {
  97.         return $this->scheduleRecipients;
  98.     }
  99.     public function addScheduleRecipient(ScheduleRecipients $scheduleRecipient): self
  100.     {
  101.         if (!$this->scheduleRecipients->contains($scheduleRecipient)) {
  102.             $this->scheduleRecipients[] = $scheduleRecipient;
  103.             $scheduleRecipient->setCampaignSchedule($this);
  104.         }
  105.         return $this;
  106.     }
  107.     public function removeScheduleRecipient(ScheduleRecipients $scheduleRecipient): self
  108.     {
  109.         if ($this->scheduleRecipients->removeElement($scheduleRecipient)) {
  110.             // set the owning side to null (unless already changed)
  111.             if ($scheduleRecipient->getCampaignSchedule() === $this) {
  112.                 $scheduleRecipient->setCampaignSchedule(null);
  113.             }
  114.         }
  115.         return $this;
  116.     }
  117.     /**
  118.      * Returns int.
  119.      */
  120.     #[Groups(['campaignSchedule:read'])]
  121.     public function getTotalRecipients(): ?int
  122.     {
  123.         return $this->getScheduleRecipients()->count();
  124.     }
  125. }