src/Evo/Infrastructure/MappingORM/SubscriptionModel.php line 33

Open in your IDE?
  1. <?php
  2. namespace Evo\Infrastructure\MappingORM;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Serializer\Filter\PropertyFilter;
  8. use App\Repository\SubscriptionModelRepository;
  9. use App\Validator\Constraints\ServiceConstraint;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. use Doctrine\Common\Collections\Collection;
  12. use Doctrine\ORM\Mapping as ORM;
  13. use Symfony\Component\Serializer\Annotation\Groups;
  14. /**
  15.  * @ApiResource(attributes={
  16.  *     "normalization_context"={"groups"={"read_subscription_model"}},
  17.  *     "denormalization_context"={"groups"={"write_subscription_model"}}
  18.  * }, itemOperations={
  19.  *     "get",
  20.  *     "put",
  21.  *     "delete"={"security"="is_granted('ROLE_ADMIN')"}
  22.  * })
  23.  * @ApiFilter(SearchFilter::class, properties={"name": "partial"})
  24.  * @ApiFilter(BooleanFilter::class, properties={"isActive"})
  25.  * @ApiFilter(PropertyFilter::class, arguments={"parameterName": "properties", "overrideDefaultProperties": false})
  26.  * @ORM\Entity(repositoryClass=SubscriptionModelRepository::class)
  27.  *
  28.  * @ServiceConstraint
  29.  */
  30. class SubscriptionModel
  31. {
  32.     /**
  33.      * @ORM\Id
  34.      * @ORM\GeneratedValue
  35.      * @ORM\Column(type="integer")
  36.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model", "read_pack", "read_discount", "write_discount", "read_discount_for_select"})
  37.      */
  38.     private ?int $id null;
  39.     /**
  40.      * @ORM\Column(type="string", length=255)
  41.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model", "read_pack", "read_discount"})
  42.      */
  43.     private ?string $name null;
  44.     /**
  45.      * @ORM\Column(type="string", length=255)
  46.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model", "read_pack", "read_discount"})
  47.      */
  48.     private ?string $uniqueKey null;
  49.     /**
  50.      * @ORM\Column(type="float")
  51.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  52.      */
  53.     private ?float $securityDeposit null;
  54.     /**
  55.      * @ORM\ManyToMany(targetEntity=DiscountCode::class, mappedBy="subscriptionModel")
  56.      */
  57.     private ?Collection $discountCodes;
  58.     /**
  59.      * @ORM\Column(type="boolean", nullable=true)
  60.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  61.      */
  62.     private $isActive;
  63.     /**
  64.      * @ORM\Column(type="array", nullable=true)
  65.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  66.      */
  67.     private $authorizedFrequency = [];
  68.     /**
  69.      * @ORM\Column(type="datetime", nullable=true)
  70.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  71.      */
  72.     private $createdAt;
  73.     /**
  74.      * @ORM\Column(type="datetime", nullable=true)
  75.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  76.      */
  77.     private ?\DateTimeInterface $updateAt null;
  78.     /**
  79.      * @ORM\Column(type="float", nullable=true)
  80.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  81.      */
  82.     private ?float $priceWithoutTax null;
  83.     /**
  84.      * @ORM\OneToMany(targetEntity=Item::class, mappedBy="subscriptionModel", cascade={"persist", "remove"})
  85.      */
  86.     private ?Collection $includedProducts;
  87.     /**
  88.      * @ORM\OneToMany(targetEntity=Service::class, mappedBy="subscriptionModel", cascade={"persist", "remove"})
  89.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  90.      */
  91.     private ?Collection $includedServices;
  92.     /**
  93.      * @ORM\ManyToOne(targetEntity=Product::class)
  94.      * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
  95.      * @Groups({"read_subscription_model", "write_subscription_model", "admin_subscription_model"})
  96.      */
  97.     private ?Product $productForInvoicing null;
  98.     /**
  99.      * @ORM\OneToMany(targetEntity=BAL::class, mappedBy="subscriptionModel", orphanRemoval=true)
  100.      */
  101.     private Collection $bal;
  102.     public function __construct()
  103.     {
  104.         $this->includedServices = new ArrayCollection();
  105.         $this->includedProducts = new ArrayCollection();
  106.         $this->discountCodes = new ArrayCollection();
  107.         $this->createdAt = new \DateTime();
  108.         $this->bal = new ArrayCollection();
  109.     }
  110.     public function getId(): ?int
  111.     {
  112.         return $this->id;
  113.     }
  114.     public function getName(): ?string
  115.     {
  116.         return $this->name;
  117.     }
  118.     public function setName(string $name): self
  119.     {
  120.         $this->name $name;
  121.         return $this;
  122.     }
  123.     public function getUniqueKey(): ?string
  124.     {
  125.         return $this->uniqueKey;
  126.     }
  127.     public function setUniqueKey(string $uniqueKey): self
  128.     {
  129.         $this->uniqueKey $uniqueKey;
  130.         return $this;
  131.     }
  132.     public function getSecurityDeposit(): ?float
  133.     {
  134.         return $this->securityDeposit;
  135.     }
  136.     public function setSecurityDeposit(float $securityDeposit): self
  137.     {
  138.         $this->securityDeposit $securityDeposit;
  139.         return $this;
  140.     }
  141.     public function getIsActive(): ?bool
  142.     {
  143.         return $this->isActive;
  144.     }
  145.     public function setIsActive(?bool $isActive): self
  146.     {
  147.         $this->isActive $isActive;
  148.         return $this;
  149.     }
  150.     public function getAuthorizedFrequency(): ?array
  151.     {
  152.         return $this->authorizedFrequency;
  153.     }
  154.     public function setAuthorizedFrequency(?array $authorizedFrequency): self
  155.     {
  156.         $this->authorizedFrequency $authorizedFrequency;
  157.         return $this;
  158.     }
  159.     public function getCreatedAt(): ?\DateTimeInterface
  160.     {
  161.         return $this->createdAt;
  162.     }
  163.     public function setCreatedAt(?\DateTimeInterface $createdAt): self
  164.     {
  165.         $this->createdAt $createdAt;
  166.         return $this;
  167.     }
  168.     public function getUpdateAt(): ?\DateTimeInterface
  169.     {
  170.         return $this->updateAt;
  171.     }
  172.     public function setUpdateAt(?\DateTimeInterface $updateAt): self
  173.     {
  174.         $this->updateAt $updateAt;
  175.         return $this;
  176.     }
  177.     public function getPriceWithoutTax(): ?float
  178.     {
  179.         return $this->priceWithoutTax;
  180.     }
  181.     public function setPriceWithoutTax(?float $priceWithoutTax): self
  182.     {
  183.         $this->priceWithoutTax $priceWithoutTax;
  184.         return $this;
  185.     }
  186.     /**
  187.      * @return Collection<int, Service>
  188.      */
  189.     public function getIncludedServices(): Collection
  190.     {
  191.         return $this->includedServices;
  192.     }
  193.     public function addIncludedService(Service $includedService): self
  194.     {
  195.         if (!$this->includedServices->contains($includedService)) {
  196.             $this->includedServices[] = $includedService;
  197.             $includedService->setSubscriptionModel($this);
  198.         }
  199.         return $this;
  200.     }
  201.     public function removeIncludedService(Service $includedService): self
  202.     {
  203.         // set the owning side to null (unless already changed)
  204.         if ($this->includedServices->removeElement($includedService) && $includedService->getSubscriptionModel() === $this) {
  205.             $includedService->setSubscriptionModel(null);
  206.         }
  207.         return $this;
  208.     }
  209.     /**
  210.      * @return Collection<int, Item>
  211.      */
  212.     public function getIncludedProducts(): Collection
  213.     {
  214.         return $this->includedProducts;
  215.     }
  216.     public function addIncludedProduct(Item $includedProduct): self
  217.     {
  218.         if (!$this->includedProducts->contains($includedProduct)) {
  219.             $this->includedProducts[] = $includedProduct;
  220.             $includedProduct->setSubscriptionModel($this);
  221.         }
  222.         return $this;
  223.     }
  224.     public function removeIncludedProduct(Item $includedProduct): self
  225.     {
  226.         // set the owning side to null (unless already changed)
  227.         if ($this->includedProducts->removeElement($includedProduct) && $includedProduct->getSubscriptionModel() === $this) {
  228.             $includedProduct->setSubscriptionModel(null);
  229.         }
  230.         return $this;
  231.     }
  232.     public function getDiscountCodes(): Collection
  233.     {
  234.         return $this->discountCodes;
  235.     }
  236.     public function addDiscountCode(DiscountCode $discountCode): self
  237.     {
  238.         if (!$this->discountCodes->contains($discountCode)) {
  239.             $this->discountCodes[] = $discountCode;
  240.             $discountCode->addSubscriptionModel($this);
  241.         }
  242.         return $this;
  243.     }
  244.     public function removeDiscountCode(DiscountCode $discountCode): self
  245.     {
  246.         if ($this->discountCodes->removeElement($discountCode)) {
  247.             $discountCode->removeSubscriptionModel($this);
  248.         }
  249.         return $this;
  250.     }
  251.     public function getProductForInvoicing(): ?Product
  252.     {
  253.         return $this->productForInvoicing;
  254.     }
  255.     public function setProductForInvoicing(?Product $productForInvoicing): self
  256.     {
  257.         $this->productForInvoicing $productForInvoicing;
  258.         return $this;
  259.     }
  260.     public static function createFixture(array $data): self
  261.     {
  262.         $self = new self();
  263.         $self->name $data['name'];
  264.         $self->uniqueKey $data['uniqueKey'];
  265.         $self->securityDeposit $data['securityDeposit'];
  266.         $self->isActive $data['isActive'] ?? true;
  267.         $self->authorizedFrequency $data['authorizedFrequency'];
  268.         $self->createdAt $data['createdAt'] ?? new \DateTime();
  269.         $self->updateAt $data['updateAt'] ?? new \DateTime();
  270.         $self->priceWithoutTax $data['priceWithoutTax'];
  271.         $self->productForInvoicing $data['productForInvoicing'];
  272.         // includedServices
  273.         foreach ($data['includedServices'] ?? [] as $service) {
  274.             $self->addIncludedService($service);
  275.         }
  276.         return $self;
  277.     }
  278.     public function getBal(): Collection
  279.     {
  280.         return $this->bal;
  281.     }
  282.     public function addBal(BAL $bal): self
  283.     {
  284.         if (!$this->bal->contains($bal)) {
  285.             $this->bal[] = $bal;
  286.             $bal->setSubscriptionModel($this);
  287.         }
  288.         return $this;
  289.     }
  290.     public function removeBal(BAL $bal): self
  291.     {
  292.         if ($this->bal->removeElement($bal)) {
  293.             // set the owning side to null (unless already changed)
  294.             if ($bal->getSubscriptionModel() === $this) {
  295.                 $bal->setSubscriptionModel(null);
  296.             }
  297.         }
  298.         return $this;
  299.     }
  300.     /**
  301.      * TEMPORARY.
  302.      */
  303.     public function setId($id): self
  304.     {
  305.         $this->id $id;
  306.         return $this;
  307.     }
  308. }