<?php
namespace App\Entity\System;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Subscription
*
* @ORM\Table(name="subscriptions")
*
* @ORM\Entity(repositoryClass="App\Repository\System\SubscriptionRepository")
*/
class Subscription
{
public const COURSE_PACK_ID = 0;
public const PACK_B2B = 20;
public const PACK_ECOMMERCE_M = 27;
public const PACK_ECOMMERCE_S = 28;
public const PACK_ECOMMERCE_A = 29;
public const PACK_MARKETPLACE_M = 30;
public const PACK_MARKETPLACE_S = 31;
public const PACK_MARKETPLACE_A = 32;
public const REFERENCE_INIT_AMT = 'INIT-AMT';
public const PACK_FREE_ID = 33;
public const CANCEL_TEXT = 'Cancel';
public const ERROR_TEXT = 'Error';
public const REGISTRATION_NAME = 'Academy Registration';
public const COURSE_NAME = 'Course';
public const ONBOARDING_FEATURE_COURSE_NAME = 'Onboarding';
public const INTERNAL_FEATURE_COURSE_NAME = 'Internal';
public const EXTERNAL_FEATURE_COURSE_NAME = 'External';
/**
* @var int
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*
* @ORM\Column(type="integer", name="id_subscription")
*/
private $id;
/**
* @var int
*
* @ORM\Column(type="integer", length=10, name="id_pack")
*/
private $packId;
/**
* @var string
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $name;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", options={"default" : "CURRENT_TIMESTAMP"})
*/
private $dateCreate;
/**
* @var int|null
*
* @ORM\Column(type="integer", columnDefinition="tinyint(4)", nullable=true)
*/
private $paymentFrequency;
/**
* @var float|null
*
* @ORM\Column(type="float", nullable=true)
*/
private $cost;
/**
* @var string|null
*
* @ORM\Column(type="string", length=17, nullable=true)
*/
private $idPaypal;
/**
* @var int|null
*
* @ORM\Column(type="integer", length=10, nullable=true)
*/
private $idErp;
/**
* @var int|null
*
* @ORM\Column(type="integer", length=10, nullable=true)
*/
private $idCuota;
/**
* @var int|null
*
* @ORM\Column(type="integer", length=11, nullable=true)
*/
private $idAttribute;
/**
* @var Product|null
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\Product", inversedBy="subscriptions")
*
* @ORM\JoinColumn(referencedColumnName="id_product", name="id_product", nullable=true)
*/
private $product;
/**
* @var int
*
* @ORM\Column(type="integer", name="id_new_product", length=11, options={"default" : 0})
*/
private $newProductId;
/**
* @var SubscriptionLine[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="SubscriptionLine", mappedBy="subscription", cascade={"persist"})
*/
private $subscriptionLines;
/**
* @var SubscriptionLineHistory[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="SubscriptionLineHistory", mappedBy="subscription", cascade={"persist"})
*/
private $subscriptionLineHistories;
public function __construct()
{
$this->subscriptionLines = new ArrayCollection();
$this->subscriptionLineHistories = new ArrayCollection();
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
* @param string $name
*
* @return Subscription
*/
public function setName(string $name): Subscription
{
$this->name = $name;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDateCreate(): ?\DateTime
{
return $this->dateCreate;
}
/**
* @param \DateTime $dateCreate
*
* @return Subscription
*/
public function setDateCreate(\DateTime $dateCreate): Subscription
{
$this->dateCreate = $dateCreate;
return $this;
}
/**
* @return int|null
*/
public function getPaymentFrequency(): ?int
{
return $this->paymentFrequency;
}
/**
* @param int|null $paymentFrequency
*
* @return Subscription
*/
public function setPaymentFrequency(?int $paymentFrequency): Subscription
{
$this->paymentFrequency = $paymentFrequency;
return $this;
}
/**
* @return int
*/
public function getPackId(): int
{
return $this->packId;
}
/**
* @param int $packId
*
* @return Subscription
*/
public function setPackId(int $packId): Subscription
{
$this->packId = $packId;
return $this;
}
/**
* @return float|null
*/
public function getCost(): ?float
{
return $this->cost;
}
/**
* @param float|null $cost
*
* @return Subscription
*/
public function setCost(?float $cost): Subscription
{
$this->cost = $cost;
return $this;
}
/**
* @return string|null
*/
public function getIdPaypal(): ?string
{
return $this->idPaypal;
}
/**
* @param string|null $idPaypal
*
* @return Subscription
*/
public function setIdPaypal(?string $idPaypal): Subscription
{
$this->idPaypal = $idPaypal;
return $this;
}
/**
* @return int|null
*/
public function getIdErp(): ?int
{
return $this->idErp;
}
/**
* @param int|null $idErp
*
* @return Subscription
*/
public function setIdErp(?int $idErp): Subscription
{
$this->idErp = $idErp;
return $this;
}
/**
* @return int|null
*/
public function getIdCuota(): ?int
{
return $this->idCuota;
}
/**
* @param int|null $idCuota
*
* @return Subscription
*/
public function setIdCuota(?int $idCuota): Subscription
{
$this->idCuota = $idCuota;
return $this;
}
/**
* @return int|null
*/
public function getIdAttribute(): ?int
{
return $this->idAttribute;
}
/**
* @param int|null $idAttribute
*
* @return Subscription
*/
public function setIdAttribute(?int $idAttribute): Subscription
{
$this->idAttribute = $idAttribute;
return $this;
}
/**
* @return Product|null
*/
public function getProduct(): ?Product
{
return $this->product;
}
/**
* @param Product|null $product
*
* @return Subscription
*/
public function setProduct(?Product $product): Subscription
{
$this->product = $product;
return $this;
}
/**
* @return SubscriptionLine[]|ArrayCollection
*/
public function getSubscriptionLine()
{
return $this->subscriptionLines;
}
/**
* @param SubscriptionLine[]|ArrayCollection $subscriptionLines
*
* @return Subscription
*/
public function setSubscriptionLine($subscriptionLines): Subscription
{
$this->subscriptionLines = $subscriptionLines;
return $this;
}
/**
* @return SubscriptionLineHistory|ArrayCollection
*/
public function getSubscriptionLineHistory()
{
return $this->subscriptionLineHistories;
}
/**
* @param SubscriptionLineHistory[]|ArrayCollection $subscriptionLineHistories
*
* @return Subscription
*/
public function setSubscriptionLineHistories($subscriptionLineHistories): Subscription
{
$this->subscriptionLineHistories = $subscriptionLineHistories;
return $this;
}
/**
* @return int
*/
public function getNewProductId(): int
{
return $this->newProductId;
}
/**
* @param int $newProductId
*
* @return Subscription
*/
public function setNewProductId(int $newProductId): Subscription
{
$this->newProductId = $newProductId;
return $this;
}
public static function getSubscriptionIdByPackIdAndSubscriptionDataPeriodicity(int $packId, ?string $subscriptionPeriodicity): int
{
if ($packId === Pack::PACK_B2B) {
return self::PACK_B2B;
}
if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
return self::PACK_ECOMMERCE_M;
}
if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
return self::PACK_ECOMMERCE_A;
}
if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
return self::PACK_MARKETPLACE_M;
}
if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
return self::PACK_MARKETPLACE_A;
}
throw new \LogicException('Invalid pack ID or subscription periodicity');
}
}