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

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\PackManager;
  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 PackManager $packManager;
  23.     private SessionService $sessionService;
  24.     private SecurityService $securityService;
  25.     public function __construct(
  26.         RequestStack $requestStack,
  27.         OrderManager $orderManager,
  28.         SubscriptionManager $subscriptionManager,
  29.         LogWriterService $logWriterService,
  30.         PackManager $packManager,
  31.         SessionService $sessionService,
  32.         SecurityService $securityService
  33.     ) {
  34.         $this->requestStack $requestStack;
  35.         $this->orderManager $orderManager;
  36.         $this->subscriptionManager $subscriptionManager;
  37.         $this->logWriterService $logWriterService;
  38.         $this->packManager $packManager;
  39.         $this->sessionService $sessionService;
  40.         $this->securityService $securityService;
  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 $parametersstring &$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.             $pack $this->packManager->getPackBySubscriptionId(
  133.                 (int)$purchaseSubscriptionData['purchasePack'],
  134.                 Language::SPANISH_LANGUAGE_ID
  135.             );
  136.             $packName = ($pack) ? $pack->getName() : '';
  137.         }
  138.         return [
  139.             'orderId' => $orderId,
  140.             'orderTotal' => $orderTotalPack $orderTotalService,
  141.             'packName' => $packName,
  142.         ];
  143.     }
  144. }