src/Entity/System/Subscription.php line 15

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