src/Application/Service/Front/SubscriptionService.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Application\Service\Front;
  3. use App\Entity\System\Product;
  4. use App\Manager\System\OrderManager;
  5. use App\Manager\System\PackLanguageManager;
  6. use App\Manager\System\SubscriptionManager;
  7. use App\Application\Service\Helper\LogWriterService;
  8. use App\Application\Service\Session\SessionService;
  9. use App\Entity\System\Customer;
  10. use App\Entity\System\Language;
  11. use App\Entity\System\Pack;
  12. use App\Entity\System\Subscription;
  13. use App\Service\SecurityService;
  14. use Doctrine\ORM\Exception as ORMException;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. class SubscriptionService
  17. {
  18. private RequestStack $requestStack;
  19. private OrderManager $orderManager;
  20. private SubscriptionManager $subscriptionManager;
  21. private LogWriterService $logWriterService;
  22. private SessionService $sessionService;
  23. private SecurityService $securityService;
  24. private PackLanguageManager $packLanguageManager;
  25. public function __construct(
  26. RequestStack $requestStack,
  27. OrderManager $orderManager,
  28. SubscriptionManager $subscriptionManager,
  29. LogWriterService $logWriterService,
  30. SessionService $sessionService,
  31. SecurityService $securityService,
  32. PackLanguageManager $packLanguageManager,
  33. ) {
  34. $this->requestStack = $requestStack;
  35. $this->orderManager = $orderManager;
  36. $this->subscriptionManager = $subscriptionManager;
  37. $this->logWriterService = $logWriterService;
  38. $this->sessionService = $sessionService;
  39. $this->securityService = $securityService;
  40. $this->packLanguageManager = $packLanguageManager;
  41. }
  42. /**
  43. * @param array $parameters
  44. */
  45. public function checkout(array $parameters): void
  46. {
  47. $logMessage = '';
  48. $this->requestStack->getSession()->remove('checkout_services');
  49. $this->requestStack->getSession()->remove('goToStepServices');
  50. $this->requestStack->getSession()->remove('arrayProductServices');
  51. $this->sessionService->delete('restOrderIds');
  52. $this->sessionService->delete('paidOrderIds');
  53. $customer = $this->securityService->findSessionCustomer();
  54. if ($customer === null) {
  55. return;
  56. }
  57. $this->manageStepServices($customer, $parameters);
  58. $this->manageStepShops($customer, $parameters, $logMessage);
  59. /** @var Subscription $subscription */
  60. $subscription = $this->subscriptionManager->findOneById((int)$parameters['idSubscription']);
  61. if (Pack::PACK_WITHOUT_PACK === $customer->getIdPack() || ($subscription && $subscription->getPackId() > $customer->getIdPack())) {
  62. if ($parameters['idSubscription']) {
  63. $this->requestStack->getSession()->set('newPackContracted', $parameters['idSubscription']);
  64. $logMessage .= ' - Pack: '.$parameters['idSubscription'];
  65. }
  66. }
  67. $logMessage = 'Usuario: '.$customer->getId().$logMessage;
  68. $this->logWriterService->subscriptionPurchase($logMessage);
  69. }
  70. /**
  71. * @param Customer $customer
  72. * @param array $parameters
  73. */
  74. public function manageStepServices(Customer $customer, array $parameters): void
  75. {
  76. if (empty($parameters['goToStepServices']) && empty($parameters['serviceProductId'])) {
  77. return;
  78. }
  79. $customerPackId = $customer->getIdPack();
  80. if ($parameters['serviceProductId']) {
  81. if (isset(Product::ALLOWED_CONNECTOR_PRODUCT_IDS_BY_PACK_ID[$customerPackId]) && in_array($parameters['serviceProductId'], Product::ALLOWED_CONNECTOR_PRODUCT_IDS_BY_PACK_ID[$customerPackId], true)) {
  82. $this->requestStack->getSession()->set('goToStepServices', true);
  83. $this->requestStack->getSession()->set('arrayProductServices', [$parameters['serviceProductId'] => true]);
  84. } elseif (in_array($parameters['serviceProductId'], Product::ALLOWED_CONNECTOR_PRODUCT_IDS_BY_PACK_ID[Pack::PACK_ECOMMERCE], true)) {
  85. $this->requestStack->getSession()->set('newPackContracted', Subscription::PACK_ECOMMERCE_M);
  86. } elseif (in_array($parameters['serviceProductId'], Product::ALLOWED_CONNECTOR_PRODUCT_IDS_BY_PACK_ID[Pack::PACK_MARKETPLACES], true)) {
  87. $this->requestStack->getSession()->set('newPackContracted', Subscription::PACK_MARKETPLACE_M);
  88. }
  89. }
  90. }
  91. /**
  92. * @param Customer $customer
  93. * @param array $parameters
  94. * @param string $logMessage
  95. */
  96. private function manageStepShops(Customer $customer, array $parameters, string &$logMessage): void
  97. {
  98. if ($parameters['isNewShopSelected']) {
  99. $newShopSelected = [
  100. 'catalogId' => $parameters['catalogId'],
  101. 'themeId' => $parameters['themeId'],
  102. ];
  103. $logMessage .= ' - Catálogo: '.$parameters['catalogId'].', Plantilla: '.$parameters['themeId'];
  104. $this->requestStack->getSession()->set('newShopSelected', $newShopSelected);
  105. $customerPack = $customer->getIdPack();
  106. if ($customerPack === Pack::PACK_ECOMMERCE || $customerPack === Pack::PACK_MARKETPLACES) {
  107. $this->requestStack->getSession()->set('goToStepServices', true);
  108. }
  109. }
  110. }
  111. /**
  112. * @throws ORMException
  113. */
  114. public function getPostSubscriptionInfo(): array
  115. {
  116. $orderTotalPack = 0;
  117. $orderTotalService = 0;
  118. $orderId = null;
  119. $purchaseSubscriptionData = $this->requestStack->getSession()->get('purchaseSubscriptions');
  120. if (isset($purchaseSubscriptionData['idOrderService'])) {
  121. $orderId = $purchaseSubscriptionData['idOrderService'];
  122. $order = $this->orderManager->findOneById($orderId);
  123. $orderTotalService = $order->getTotalPaid();
  124. }
  125. if (isset($purchaseSubscriptionData['idOrderPack'])) {
  126. $orderId = $purchaseSubscriptionData['idOrderPack'];
  127. $order = $this->orderManager->findOneById($orderId);
  128. $orderTotalPack = $order->getTotalPaid();
  129. }
  130. $packName = '';
  131. if (isset($purchaseSubscriptionData['purchasePack'])) {
  132. $packLanguage = $this->packLanguageManager->getPackBySubscriptionId(
  133. (int)$purchaseSubscriptionData['purchasePack'],
  134. Language::SPANISH_LANGUAGE_ID
  135. );
  136. $packName = ($packLanguage) ? $packLanguage->getName() : '';
  137. }
  138. return [
  139. 'orderId' => $orderId,
  140. 'orderTotal' => $orderTotalPack + $orderTotalService,
  141. 'packName' => $packName,
  142. ];
  143. }
  144. }