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