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