<?php
namespace App\Controller\Front;
use App\Application\Service\Cart\CartService;
use App\Application\Service\Front\SubscriptionService;
use App\Application\Service\Session\SessionService;
use App\Entity\System\Customer;
use App\Service\SecurityService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SubscriptionController extends AbstractController
{
private SubscriptionService $subscriptionService;
private RequestStack $requestStack;
private ParameterBagInterface $parameterBag;
private SessionService $sessionService;
private CartService $cartService;
private SecurityService $securityService;
public function __construct(
SubscriptionService $subscriptionService,
RequestStack $requestStack,
ParameterBagInterface $parameterBag,
SessionService $sessionService,
CartService $cartService,
SecurityService $securityService
) {
$this->subscriptionService = $subscriptionService;
$this->requestStack = $requestStack;
$this->parameterBag = $parameterBag;
$this->sessionService = $sessionService;
$this->cartService = $cartService;
$this->securityService = $securityService;
}
/**
* @Route("/{_locale}/subscription/checkout", name="checkout", defaults={"_locale":"es"})
* @Route("/subscription/checkout", name="checkout_wo_locale")
*
* @param Request $request
*
* @return Response
*/
public function checkout(Request $request): Response
{
if ($cartId = $this->sessionService->get('id_cart_services')) {
$this->cartService->cleanCart((int)$cartId);
}
$parameters = [
'isNewShopSelected' => (int)$request->get('isNewShopSelected'),
'catalogId' => $request->get('catalogId'),
'themeId' => $request->get('themeId'),
'idSubscription' => $request->get('idSubscription'),
'goToStepServices' => (bool)$request->get('goToStepServices'),
'serviceProductId' => (int)$request->get('serviceProductId'),
'paypalSandbox' => \json_encode($this->parameterBag->get('paypal_sandbox')),
'paypalFraudNet' => $this->parameterBag->get('paypal_fraud_net'),
'sessionUuid' => $this->securityService->findSessionCustomerId().time().random_int(1, 999999),
'websideId' => $this->parameterBag->get('paypal_merchant_id').'_services_checkout',
];
$this->subscriptionService->checkout($parameters);
return $this->render('front/subscription/checkout_react.html.twig', $parameters);
}
/**
* @Route("/subscription/packPurchaseProcess", name="packPurchaseProcess")
*/
public function packPurchaseProcess(): Response
{
$customer = $this->getUser();
if (!$customer instanceof Customer) {
return $this->render(
'front/subscription/end_purchases_error.html.twig',
[
'title' => '',
'msg' => [
'message' => 'Ha ocurrido un error al recuperar el usuario',
],
]
);
}
$legacySubscriptionController = new \subscriptionController();
$legacySubscriptionController->packPurchaseProcess($customer);
$serviceOperationResult = $this->requestStack->getSession()->get('serviceOperationResult');
$serviceOperationData = $this->requestStack->getSession()->get('serviceOperationData');
$this->requestStack->getSession()->remove('serviceOperationResult');
$this->requestStack->getSession()->remove('serviceOperationData');
if ($serviceOperationResult === 'error') {
return $this->render(
'front/subscription/end_purchases_error.html.twig',
$serviceOperationData
);
}
$subscriptionData = $this->subscriptionService->getPostSubscriptionInfo();
return $this->render('front/subscription/end_purchases.html.twig', [
'orderId' => $subscriptionData['orderId'],
'totalOrder' => $subscriptionData['orderTotal'],
'packName' => $subscriptionData['packName'],
]);
}
/**
* @Route("/subscription/finishPackPurchaseProcess", name="finishPackPurchaseProcess")
*/
public function finishPackPurchaseProcess(): Response
{
$subscriptionData = $this->subscriptionService->getPostSubscriptionInfo();
return $this->render('front/subscription/end_purchases.html.twig', [
'orderId' => $subscriptionData['orderId'],
'totalOrder' => $subscriptionData['orderTotal'],
'packName' => $subscriptionData['packName'],
]);
}
/**
* @Route("/subscription/ajaxGetDataToShowEndPurchase", name="ajaxGetDataToShowEndPurchase")
*
* @return JsonResponse
*/
public function ajaxGetDataToShowEndPurchase(): JsonResponse
{
$subscription = new \subscriptionController();
$response = ['receivedParams' => $subscription->ajaxGetDataToShowEndPurchase()];
return new JsonResponse($response);
}
/**
* @Route("/{_locale}/subscription/createServices", name="subscriptionCreateServicesByCardPayment", defaults={"_locale":"es"})
* @Route("/subscription/createServices", name="subscriptionCreateServicesByCardPaymentWoLocale")
*
* @param Request $request
*
* @return Response
*/
public function subscriptionCreateServicesByCardPayment(): Response
{
$subscription = new \subscriptionController();
$subscription->createServices();
$serviceOperationResult = $this->requestStack->getSession()->get('serviceOperationResult');
$serviceOperationData = $this->requestStack->getSession()->get('serviceOperationData');
$this->requestStack->getSession()->remove('serviceOperationResult');
$this->requestStack->getSession()->remove('serviceOperationData');
if ($serviceOperationResult === 'error') {
return $this->render(
'front/subscription/end_purchases_error.html.twig',
$serviceOperationData
);
}
$subscriptionData = $this->subscriptionService->getPostSubscriptionInfo();
return $this->render('front/subscription/end_purchases.html.twig', [
'orderId' => $subscriptionData['orderId'],
'totalOrder' => $subscriptionData['orderTotal'],
'packName' => $subscriptionData['packName'],
]);
}
/**
* @Route("/{_locale}/subscription/endPackCreditCard", name="endPackCreditCard", defaults={"_locale":"es"})
* @Route("/subscription/endPackCreditCard", name="endPackCreditCardWoLocale")
*
* @param Request $request
*
* @return Response
*/
public function endPackCreditCard(Request $request): Response
{
$subscription = new \subscriptionController();
$subscription->endPackCreditCard($request->get('token'));
// $subscription->createServices();
$serviceOperationResult = $this->requestStack->getSession()->get('serviceOperationResult');
$serviceOperationData = $this->requestStack->getSession()->get('serviceOperationData');
$this->requestStack->getSession()->remove('serviceOperationResult');
$this->requestStack->getSession()->remove('serviceOperationData');
if ($serviceOperationResult === 'error') {
return $this->render(
'front/subscription/end_purchases_error.html.twig',
$serviceOperationData
);
}
$subscriptionData = $this->subscriptionService->getPostSubscriptionInfo();
return $this->render('front/subscription/end_purchases.html.twig', [
'orderId' => $subscriptionData['orderId'],
'totalOrder' => $subscriptionData['orderTotal'],
'packName' => $subscriptionData['packName'],
]);
}
/**
* @Route("/{_locale}/subscription/createPackBillingAgreement", name="createPackBillingAgreement", defaults={"_locale":"es"})
* @Route("/subscription/createPackBillingAgreement", name="createPackBillingAgreementWoLocale")
*
* @param Request $request
*
* @return Response
*/
public function createPackBillingAgreement(Request $request): Response
{
$subscription = new \subscriptionController();
$subscription->createPackBillingAgreement($request->get('token'));
$serviceOperationResult = $this->requestStack->getSession()->get('serviceOperationResult');
$serviceOperationData = $this->requestStack->getSession()->get('serviceOperationData');
$this->requestStack->getSession()->remove('serviceOperationResult');
$this->requestStack->getSession()->remove('serviceOperationData');
if ($serviceOperationResult === 'error') {
return $this->render(
'front/subscription/end_purchases_error.html.twig',
$serviceOperationData
);
}
$subscriptionData = $this->subscriptionService->getPostSubscriptionInfo();
return $this->render('front/subscription/end_purchases.html.twig', [
'orderId' => $subscriptionData['orderId'],
'totalOrder' => $subscriptionData['orderTotal'],
'packName' => $subscriptionData['packName'],
]);
}
}