src/Entity/System/Subscription.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Entity\System;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\ORM\Mapping as ORM;
  5. /**
  6.  * Subscription
  7.  *
  8.  * @ORM\Table(name="subscriptions", indexes={
  9.  *
  10.  *     @ORM\Index(name="id_attribute", columns={"id_attribute"}),
  11.  *     @ORM\Index(name="id_erp", columns={"id_erp"}),
  12.  *     @ORM\Index(name="FK_subscriptions_ps_pack", columns={"id_pack"}),
  13.  *     @ORM\Index(name="id_cuota", columns={"id_cuota"}),
  14.  *     @ORM\Index(name="id_paypal", columns={"id_paypal"})
  15.  * })
  16.  *
  17.  * @ORM\Entity(repositoryClass="App\Repository\System\SubscriptionRepository")
  18.  */
  19. class Subscription
  20. {
  21.     public const COURSE_PACK_ID 0;
  22.     public const PACK_BASIC 1;
  23.     public const PACK_B2B 20;
  24.     public const PACK_ECOMMERCE_M 27;
  25.     public const PACK_ECOMMERCE_S 28;
  26.     public const PACK_ECOMMERCE_A 29;
  27.     public const PACK_MARKETPLACE_M 30;
  28.     public const PACK_MARKETPLACE_S 31;
  29.     public const PACK_MARKETPLACE_A 32;
  30.     public const REFERENCE_INIT_AMT 'INIT-AMT';
  31.     public const PACK_FREE_ID 33;
  32.     public const CANCEL_TEXT 'Cancel';
  33.     public const ERROR_TEXT 'Error';
  34.     public const REGISTRATION_NAME 'Academy Registration';
  35.     public const COURSE_NAME 'Course';
  36.     public const ONBOARDING_FEATURE_COURSE_NAME 'Onboarding';
  37.     public const INTERNAL_FEATURE_COURSE_NAME 'Internal';
  38.     public const EXTERNAL_FEATURE_COURSE_NAME 'External';
  39.     public const ALLOWED_ORDER_SUBSCRIPTION_PACKS = [
  40.         self::PACK_BASIC => [self::PACK_B2Bself::PACK_ECOMMERCE_Mself::PACK_ECOMMERCE_Sself::PACK_ECOMMERCE_Aself::PACK_MARKETPLACE_Mself::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  41.         self::PACK_B2B => [self::PACK_ECOMMERCE_Mself::PACK_ECOMMERCE_Sself::PACK_ECOMMERCE_Aself::PACK_MARKETPLACE_Mself::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  42.         self::PACK_ECOMMERCE_M => [self::PACK_ECOMMERCE_Sself::PACK_ECOMMERCE_Aself::PACK_MARKETPLACE_Mself::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  43.         self::PACK_ECOMMERCE_S => [self::PACK_ECOMMERCE_Aself::PACK_MARKETPLACE_Mself::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  44.         self::PACK_ECOMMERCE_A => [self::PACK_MARKETPLACE_Mself::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  45.         self::PACK_MARKETPLACE_M => [self::PACK_MARKETPLACE_Sself::PACK_MARKETPLACE_A],
  46.         self::PACK_MARKETPLACE_S => [self::PACK_MARKETPLACE_A],
  47.         self::PACK_MARKETPLACE_A => [],
  48.     ];
  49.     public const SUBSCRIPTIONS_MARKETPLACE = [
  50.         self::PACK_MARKETPLACE_M,
  51.         self::PACK_MARKETPLACE_A,
  52.     ];
  53.     public const SUBSCRIPTIONS_ECOMMERCE = [
  54.         self::PACK_ECOMMERCE_M,
  55.         self::PACK_ECOMMERCE_A,
  56.     ];
  57.     public const PAYMENT_FREQUENCY_YEAR 12;
  58.     /**
  59.      * @var int
  60.      *
  61.      * @ORM\Id
  62.      *
  63.      * @ORM\GeneratedValue(strategy="AUTO")
  64.      *
  65.      * @ORM\Column(type="integer", name="id_subscription")
  66.      */
  67.     private $id;
  68.     /**
  69.      * @var int
  70.      *
  71.      * @ORM\Column(type="integer", length=10, name="id_pack")
  72.      */
  73.     private $packId;
  74.     /**
  75.      * @var string
  76.      *
  77.      * @ORM\Column(type="string", length=100, nullable=true)
  78.      */
  79.     private $name;
  80.     /**
  81.      * @var \DateTime
  82.      *
  83.      * @ORM\Column(type="datetime", options={"default" : "CURRENT_TIMESTAMP"})
  84.      */
  85.     private $dateCreate;
  86.     /**
  87.      * @var int|null
  88.      *
  89.      * @ORM\Column(type="integer", nullable=true)
  90.      */
  91.     private $paymentFrequency;
  92.     /**
  93.      * @var float|null
  94.      *
  95.      * @ORM\Column(type="float", nullable=true)
  96.      */
  97.     private $cost;
  98.     /**
  99.      * @var string|null
  100.      *
  101.      * @ORM\Column(type="string", length=17, nullable=true)
  102.      */
  103.     private $idPaypal;
  104.     /**
  105.      * @var int|null
  106.      *
  107.      * @ORM\Column(type="integer", length=10, nullable=true)
  108.      */
  109.     private $idErp;
  110.     /**
  111.      * @var int|null
  112.      *
  113.      * @ORM\Column(type="integer", length=10, nullable=true)
  114.      */
  115.     private $idCuota;
  116.     /**
  117.      * @var int|null
  118.      *
  119.      * @ORM\Column(type="integer", length=11, nullable=true)
  120.      */
  121.     private $idAttribute;
  122.     /**
  123.      * @var Product|null
  124.      *
  125.      * @ORM\ManyToOne(targetEntity="App\Entity\System\Product", inversedBy="subscriptions")
  126.      *
  127.      * @ORM\JoinColumn(referencedColumnName="id_product", name="id_product", nullable=true)
  128.      */
  129.     private $product;
  130.     /**
  131.      * @var int
  132.      *
  133.      * @ORM\Column(type="integer", name="id_new_product", length=11, options={"default" : 0})
  134.      */
  135.     private $newProductId;
  136.     /**
  137.      * @var SubscriptionLine[]|ArrayCollection
  138.      *
  139.      * @ORM\OneToMany(targetEntity="SubscriptionLine", mappedBy="subscription", cascade={"persist"})
  140.      */
  141.     private $subscriptionLines;
  142.     /**
  143.      * @var SubscriptionLineHistory[]|ArrayCollection
  144.      *
  145.      * @ORM\OneToMany(targetEntity="SubscriptionLineHistory", mappedBy="subscription", cascade={"persist"})
  146.      */
  147.     private $subscriptionLineHistories;
  148.     public function __construct()
  149.     {
  150.         $this->subscriptionLines = new ArrayCollection();
  151.         $this->subscriptionLineHistories = new ArrayCollection();
  152.     }
  153.     /**
  154.      * @return int
  155.      */
  156.     public function getId(): int
  157.     {
  158.         return $this->id;
  159.     }
  160.     /**
  161.      * @return string|null
  162.      */
  163.     public function getName(): ?string
  164.     {
  165.         return $this->name;
  166.     }
  167.     /**
  168.      * @param string $name
  169.      *
  170.      * @return Subscription
  171.      */
  172.     public function setName(string $name): Subscription
  173.     {
  174.         $this->name $name;
  175.         return $this;
  176.     }
  177.     /**
  178.      * @return \DateTime|null
  179.      */
  180.     public function getDateCreate(): ?\DateTime
  181.     {
  182.         return $this->dateCreate;
  183.     }
  184.     /**
  185.      * @param \DateTime $dateCreate
  186.      *
  187.      * @return Subscription
  188.      */
  189.     public function setDateCreate(\DateTime $dateCreate): Subscription
  190.     {
  191.         $this->dateCreate $dateCreate;
  192.         return $this;
  193.     }
  194.     /**
  195.      * @return int|null
  196.      */
  197.     public function getPaymentFrequency(): ?int
  198.     {
  199.         return $this->paymentFrequency;
  200.     }
  201.     /**
  202.      * @param int|null $paymentFrequency
  203.      *
  204.      * @return Subscription
  205.      */
  206.     public function setPaymentFrequency(?int $paymentFrequency): Subscription
  207.     {
  208.         $this->paymentFrequency $paymentFrequency;
  209.         return $this;
  210.     }
  211.     /**
  212.      * @return int
  213.      */
  214.     public function getPackId(): int
  215.     {
  216.         return $this->packId;
  217.     }
  218.     /**
  219.      * @param int $packId
  220.      *
  221.      * @return Subscription
  222.      */
  223.     public function setPackId(int $packId): Subscription
  224.     {
  225.         $this->packId $packId;
  226.         return $this;
  227.     }
  228.     /**
  229.      * @return float|null
  230.      */
  231.     public function getCost(): ?float
  232.     {
  233.         return $this->cost;
  234.     }
  235.     /**
  236.      * @param float|null $cost
  237.      *
  238.      * @return Subscription
  239.      */
  240.     public function setCost(?float $cost): Subscription
  241.     {
  242.         $this->cost $cost;
  243.         return $this;
  244.     }
  245.     /**
  246.      * @return string|null
  247.      */
  248.     public function getIdPaypal(): ?string
  249.     {
  250.         return $this->idPaypal;
  251.     }
  252.     /**
  253.      * @param string|null $idPaypal
  254.      *
  255.      * @return Subscription
  256.      */
  257.     public function setIdPaypal(?string $idPaypal): Subscription
  258.     {
  259.         $this->idPaypal $idPaypal;
  260.         return $this;
  261.     }
  262.     /**
  263.      * @return int|null
  264.      */
  265.     public function getIdErp(): ?int
  266.     {
  267.         return $this->idErp;
  268.     }
  269.     /**
  270.      * @param int|null $idErp
  271.      *
  272.      * @return Subscription
  273.      */
  274.     public function setIdErp(?int $idErp): Subscription
  275.     {
  276.         $this->idErp $idErp;
  277.         return $this;
  278.     }
  279.     /**
  280.      * @return int|null
  281.      */
  282.     public function getIdCuota(): ?int
  283.     {
  284.         return $this->idCuota;
  285.     }
  286.     /**
  287.      * @param int|null $idCuota
  288.      *
  289.      * @return Subscription
  290.      */
  291.     public function setIdCuota(?int $idCuota): Subscription
  292.     {
  293.         $this->idCuota $idCuota;
  294.         return $this;
  295.     }
  296.     /**
  297.      * @return int|null
  298.      */
  299.     public function getIdAttribute(): ?int
  300.     {
  301.         return $this->idAttribute;
  302.     }
  303.     /**
  304.      * @param int|null $idAttribute
  305.      *
  306.      * @return Subscription
  307.      */
  308.     public function setIdAttribute(?int $idAttribute): Subscription
  309.     {
  310.         $this->idAttribute $idAttribute;
  311.         return $this;
  312.     }
  313.     /**
  314.      * @return Product|null
  315.      */
  316.     public function getProduct(): ?Product
  317.     {
  318.         return $this->product;
  319.     }
  320.     /**
  321.      * @param Product|null $product
  322.      *
  323.      * @return Subscription
  324.      */
  325.     public function setProduct(?Product $product): Subscription
  326.     {
  327.         $this->product $product;
  328.         return $this;
  329.     }
  330.     /**
  331.      * @return SubscriptionLine[]|ArrayCollection
  332.      */
  333.     public function getSubscriptionLine()
  334.     {
  335.         return $this->subscriptionLines;
  336.     }
  337.     /**
  338.      * @param SubscriptionLine[]|ArrayCollection $subscriptionLines
  339.      *
  340.      * @return Subscription
  341.      */
  342.     public function setSubscriptionLine($subscriptionLines): Subscription
  343.     {
  344.         $this->subscriptionLines $subscriptionLines;
  345.         return $this;
  346.     }
  347.     /**
  348.      * @return SubscriptionLineHistory|ArrayCollection
  349.      */
  350.     public function getSubscriptionLineHistory()
  351.     {
  352.         return $this->subscriptionLineHistories;
  353.     }
  354.     /**
  355.      * @param SubscriptionLineHistory[]|ArrayCollection $subscriptionLineHistories
  356.      *
  357.      * @return Subscription
  358.      */
  359.     public function setSubscriptionLineHistories($subscriptionLineHistories): Subscription
  360.     {
  361.         $this->subscriptionLineHistories $subscriptionLineHistories;
  362.         return $this;
  363.     }
  364.     /**
  365.      * @return int
  366.      */
  367.     public function getNewProductId(): int
  368.     {
  369.         return $this->newProductId;
  370.     }
  371.     /**
  372.      * @param int $newProductId
  373.      *
  374.      * @return Subscription
  375.      */
  376.     public function setNewProductId(int $newProductId): Subscription
  377.     {
  378.         $this->newProductId $newProductId;
  379.         return $this;
  380.     }
  381.     public static function getSubscriptionIdByPackIdAndSubscriptionDataPeriodicity(int $packId, ?string $subscriptionPeriodicity): int
  382.     {
  383.         if ($packId === Pack::PACK_B2B) {
  384.             return self::PACK_B2B;
  385.         }
  386.         if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
  387.             return self::PACK_ECOMMERCE_M;
  388.         }
  389.         if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
  390.             return self::PACK_ECOMMERCE_A;
  391.         }
  392.         if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
  393.             return self::PACK_MARKETPLACE_M;
  394.         }
  395.         if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
  396.             return self::PACK_MARKETPLACE_A;
  397.         }
  398.         throw new \LogicException('Invalid pack ID or subscription periodicity');
  399.     }
  400. }