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. /**
  219. * @deprecated
  220. */
  221. public function getPackId(): int
  222. {
  223. return $this->pack->getId();
  224. }
  225. public function setPack(Pack $pack): Subscription
  226. {
  227. $this->pack = $pack;
  228. return $this;
  229. }
  230. public function getPack(): Pack
  231. {
  232. return $this->pack;
  233. }
  234. /**
  235. * @return float|null
  236. */
  237. public function getCost(): ?float
  238. {
  239. return $this->cost;
  240. }
  241. /**
  242. * @param float|null $cost
  243. *
  244. * @return Subscription
  245. */
  246. public function setCost(?float $cost): Subscription
  247. {
  248. $this->cost = $cost;
  249. return $this;
  250. }
  251. /**
  252. * @return string|null
  253. */
  254. public function getIdPaypal(): ?string
  255. {
  256. return $this->idPaypal;
  257. }
  258. /**
  259. * @param string|null $idPaypal
  260. *
  261. * @return Subscription
  262. */
  263. public function setIdPaypal(?string $idPaypal): Subscription
  264. {
  265. $this->idPaypal = $idPaypal;
  266. return $this;
  267. }
  268. /**
  269. * @return int|null
  270. */
  271. public function getIdErp(): ?int
  272. {
  273. return $this->idErp;
  274. }
  275. /**
  276. * @param int|null $idErp
  277. *
  278. * @return Subscription
  279. */
  280. public function setIdErp(?int $idErp): Subscription
  281. {
  282. $this->idErp = $idErp;
  283. return $this;
  284. }
  285. /**
  286. * @return int|null
  287. */
  288. public function getIdCuota(): ?int
  289. {
  290. return $this->idCuota;
  291. }
  292. /**
  293. * @param int|null $idCuota
  294. *
  295. * @return Subscription
  296. */
  297. public function setIdCuota(?int $idCuota): Subscription
  298. {
  299. $this->idCuota = $idCuota;
  300. return $this;
  301. }
  302. /**
  303. * @return int|null
  304. */
  305. public function getIdAttribute(): ?int
  306. {
  307. return $this->idAttribute;
  308. }
  309. /**
  310. * @param int|null $idAttribute
  311. *
  312. * @return Subscription
  313. */
  314. public function setIdAttribute(?int $idAttribute): Subscription
  315. {
  316. $this->idAttribute = $idAttribute;
  317. return $this;
  318. }
  319. /**
  320. * @return Product|null
  321. */
  322. public function getProduct(): ?Product
  323. {
  324. return $this->product;
  325. }
  326. /**
  327. * @param Product|null $product
  328. *
  329. * @return Subscription
  330. */
  331. public function setProduct(?Product $product): Subscription
  332. {
  333. $this->product = $product;
  334. return $this;
  335. }
  336. /**
  337. * @return SubscriptionLine[]|ArrayCollection
  338. */
  339. public function getSubscriptionLine()
  340. {
  341. return $this->subscriptionLines;
  342. }
  343. /**
  344. * @param SubscriptionLine[]|ArrayCollection $subscriptionLines
  345. *
  346. * @return Subscription
  347. */
  348. public function setSubscriptionLine($subscriptionLines): Subscription
  349. {
  350. $this->subscriptionLines = $subscriptionLines;
  351. return $this;
  352. }
  353. /**
  354. * @return SubscriptionLineHistory|ArrayCollection
  355. */
  356. public function getSubscriptionLineHistory()
  357. {
  358. return $this->subscriptionLineHistories;
  359. }
  360. /**
  361. * @param SubscriptionLineHistory[]|ArrayCollection $subscriptionLineHistories
  362. *
  363. * @return Subscription
  364. */
  365. public function setSubscriptionLineHistories($subscriptionLineHistories): Subscription
  366. {
  367. $this->subscriptionLineHistories = $subscriptionLineHistories;
  368. return $this;
  369. }
  370. /**
  371. * @return int
  372. */
  373. public function getNewProductId(): int
  374. {
  375. return $this->newProductId;
  376. }
  377. /**
  378. * @param int $newProductId
  379. *
  380. * @return Subscription
  381. */
  382. public function setNewProductId(int $newProductId): Subscription
  383. {
  384. $this->newProductId = $newProductId;
  385. return $this;
  386. }
  387. public static function getSubscriptionIdByPackIdAndSubscriptionDataPeriodicity(int $packId, ?string $subscriptionPeriodicity): int
  388. {
  389. if ($packId === Pack::PACK_B2B) {
  390. return self::PACK_B2B;
  391. }
  392. if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
  393. return self::PACK_ECOMMERCE_M;
  394. }
  395. if ($packId === Pack::PACK_ECOMMERCE && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
  396. return self::PACK_ECOMMERCE_A;
  397. }
  398. if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_MONTHLY) {
  399. return self::PACK_MARKETPLACE_M;
  400. }
  401. if ($packId === Pack::PACK_MARKETPLACES && $subscriptionPeriodicity === SubscriptionData::PERIODICITY_ANNUAL) {
  402. return self::PACK_MARKETPLACE_A;
  403. }
  404. throw new \LogicException('Invalid pack ID or subscription periodicity');
  405. }
  406. }