Deprecated: Constant E_STRICT is deprecated in /var/www/PixelForce/vendor/symfony/error-handler/ErrorHandler.php on line 58

Deprecated: Constant E_STRICT is deprecated in /var/www/PixelForce/vendor/symfony/error-handler/ErrorHandler.php on line 76
Symfony Profiler

src/Controller/AgentInscriptionController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\AgentSecteur;
  5. use App\Entity\PlanAgentAccount;
  6. use App\Entity\Secteur;
  7. use App\Form\InscriptionAgentType;
  8. use App\Manager\EntityManager;
  9. use App\Manager\StripeManager;
  10. use App\Manager\UserManager;
  11. use App\Repository\AgentSecteurRepository;
  12. use App\Repository\PlanAgentAccountRepository;
  13. use App\Repository\SecteurRepository;
  14. use App\Repository\UserRepository;
  15. use App\Services\StripeService;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. class AgentInscriptionController extends AbstractController
  21. {
  22.     /**
  23.      * @var EntityManager
  24.      */
  25.     private $entityManager;
  26.     /**
  27.      * @var UserManager
  28.      */
  29.     private $userManager;
  30.     private $stripeManager;
  31.     /** @var SessionInterface $session */
  32.     private $session;
  33.     /** @var UserRepository $userRepository */
  34.     private $userRepository;
  35.     /** @var AgentSecteurRepository $repoAgentSecteur */
  36.     private $repoAgentSecteur;
  37.     /** @var PlanAgentAccountRepository $repoPlanAgentAccount */
  38.     protected $repoPlanAgentAccount;
  39.     private $secteurRepository;
  40.     public function __construct(EntityManager $entityManagerUserManager $userManagerStripeManager $stripeManagerSessionInterface $sessionUserRepository $userRepositoryAgentSecteurRepository $repoAgentSecteurPlanAgentAccountRepository $repoPlanAgentAccountSecteurRepository $secteurRepository)
  41.     {
  42.         $this->entityManager $entityManager;
  43.         $this->userManager $userManager;
  44.         $this->stripeManager $stripeManager;
  45.         $this->session $session;
  46.         $this->userRepository $userRepository;
  47.         $this->repoAgentSecteur $repoAgentSecteur;
  48.         $this->repoPlanAgentAccount $repoPlanAgentAccount;
  49.         $this->secteurRepository $secteurRepository;
  50.     }
  51.     /**
  52.      * @Route("/inscription/agent/index/{ambassador_username?}", name="agent_inscription")
  53.      */
  54.     public function inscriptionAgent(Request $requestSecteurRepository $secteurRepository$ambassador_username null)
  55.     {
  56.         $user = new User();
  57.         if($ambassador_username != null){
  58.             $user->setAmbassadorUsername($ambassador_username);
  59.         }
  60.         $parrain=null;
  61.         $form $this->createForm(InscriptionAgentType::class, $user);
  62.         $form->handleRequest($request);
  63.        try{   
  64.         $parrain=$this->getParainByUsername($ambassador_username);
  65.         if($form->isSubmitted() && $form->isValid()) {
  66.             $this->userManager->setUserPasword($user$request->request->get('inscription_agent')['password']['first'], ''false);
  67.             $user->setRoles([ User::ROLE_AGENT ]);
  68.             $user->setActive(1);
  69.             $user->setParrain($parrain);
  70.             // $user->setAccountStatus(User::ACCOUNT_STATUS['UNPAID']);
  71.             $user->setAccountStatus(User::ACCOUNT_STATUS['ACTIVE']); // On met temporairement le statut comme ACTIVE
  72.             $this->entityManager->save($user);
  73.             $this->session->set('agentId'$user->getId());
  74.             $this->addFlash(
  75.                'success',
  76.                'Votre inscription sur Pixelforce a été effectuée avec succès'
  77.             );
  78.             return $this->redirectToRoute('app_login');
  79.         }
  80.        }
  81.        catch(\Exception $e){
  82.             $this->addFlash(
  83.                 'danger',
  84.                 $e->getMessage()
  85.             );
  86.        }
  87.        
  88.         //dd($user);
  89.             return $this->render('security/signin.html.twig', [
  90.             'form' => $form->createView()
  91.         ]);
  92.     }
  93.     public function getParainByUsername($username){
  94.         if($username != null && $username !=""){
  95.            
  96.             $parrain =$this->userRepository->findOneBy(['username' => $username]);
  97.             if($parrain){
  98.                 return $parrain;
  99.             }
  100.             throw new \Exception("Le nom d'utilisateur inscrit en haut n'existe pas ou n'est pas valide.");
  101.         }
  102.         return null;
  103.     }
  104.     /**
  105.      * @Route("/inscription/agent/api", name="agent_inscription_api")
  106.      */
  107.     public function inscriptionAgentAPI(Request $request)
  108.     {
  109.         // Parse the JSON body from the request
  110.         $data json_decode($request->getContent(), true);
  111.         $user = new User();
  112.         $user->setNom($data['nom']);
  113.         $user->setPrenom($data['prenom']);
  114.         $user->setTelephone($data['telephone']);
  115.         $user->setCodePostal($data['codePostal']);
  116.         $user->setUsername($data['username']);
  117.         $user->setEmail($data['email']);
  118.         $user->setPassword($data['password']);
  119.         $user->setVille($data['ville']);
  120.         $secteurPBB $this->secteurRepository->find(Secteur::PBB);
  121.         $userSecteur = (new AgentSecteur())
  122.             ->setAgent($user)
  123.             ->setSecteur($secteurPBB)
  124.             ->setStatut(true)
  125.             ->setDateValidation(new \DateTime())
  126.         ;
  127.         // $user->removeAllAgentSecteur();
  128.         $user->addAgentSecteur($userSecteur);
  129.         $user->setRoles([ User::ROLE_AGENT ]);
  130.         $user->setActive(1);
  131.         $user->setAccountStatus(User::ACCOUNT_STATUS['ACTIVE']);
  132.         
  133.         $this->entityManager->save($user);
  134.         // Return a success response
  135.         return $this->json([
  136.             'message' => 'User created successfully',
  137.             'userId' => $user->getId(),
  138.             'data' => $data,
  139.         ]);
  140.     }
  141.     /**
  142.      * @Route("/inscription/agent/payement/intent", name="agent_register_payment_intent")
  143.      */
  144.     public function agent_register_payment_intent(Request $requestStripeService $stripeService)
  145.     {
  146.         $stripe_publishable_key $_ENV['STRIPE_PUBLIC_KEY'];
  147.         if ($request->query->get('stripe_checkout') && $request->query->get('stripe_checkout') === 'successfully') {
  148.             // Si la transaction est faite, $stripeIntentSecret doit être vide ou null
  149.             $stripeIntentSecret '';
  150.         }else{
  151.             /** @var User $agent */
  152.             $sessionAgentId =  $this->session->get('agentId');
  153.             if (!$sessionAgentId) {
  154.                 $this->addFlash(
  155.                    'warning',
  156.                    'Vous avez été rediriger vers cette page car une erreur s\'est produite !'
  157.                 );
  158.                 return $this->redirectToRoute('app_login');
  159.             }
  160.             $agent $this->userRepository->find($sessionAgentId);
  161.             $agentSecteurs $this->repoAgentSecteur->findBy(['agent' => $agent]);
  162.             $planAgentAccountType $agent->typePlanAccountBySecteurChoice($agentSecteurs);
  163.             /** @var PlanAgentAccount */
  164.             $planAgentAccount $this->repoPlanAgentAccount->findOneBy(['status' => 'active''stripePriceName' => $planAgentAccountType'statusChange' => StripeService::STATUS_CHANGE['ACTIVE']]);
  165.             // Gestion exeption
  166.             if (is_null($planAgentAccount)) {
  167.                 return throw new \Exception("Plan d'abonnement null, n'oublie pas de créer des plans d'abonnement pour les agents dans l'espace Admin"1);
  168.             }
  169.             $planPrice $planAgentAccount->getAmount();
  170.             $stripeIntentSecret $stripeService->intentSecret($planPrice);
  171.         }
  172.       
  173.         return $this->render('security/inscription/agent_register_payment.html.twig', [
  174.             'stripeIntentSecret' => $stripeIntentSecret,
  175.             'stripe_publishable_key' => $stripe_publishable_key,
  176.             'sessionAgentId' => $sessionAgentId,
  177.             'agent_accountStatus' => USER::ACCOUNT_STATUS['UNPAID'],
  178.             'repoAgentSecteur' => $this->repoAgentSecteur,
  179.             'repoUser' => $this->userRepository,
  180.             'plan' => $planAgentAccount,
  181.             'planPrice' => $planPrice,
  182.             'planAgentAccountType' => $planAgentAccountType
  183.         ]);
  184.     }
  185.     /**
  186.      * @Route("/inscription/agent/payement/execute", name="agent_register_payment_execute")
  187.      */
  188.     public function agent_register_payment_execute(Request $request)
  189.     {
  190.         $sessionAgentId =  $this->session->get('agentId');
  191.         if ($request->getMethod() === "POST") {
  192.             $sessionAgentId_Post intval($_POST['sessionAgentId']);
  193.             if ($sessionAgentId_Post === $sessionAgentId) {
  194.                 $user $this->userRepository->find($sessionAgentId_Post);
  195.                 $this->stripeManager->persistPayment($user$_POST);
  196.             }else{
  197.                 return $this->json(
  198.                     [
  199.                         'stripe_checkout' => 'error',
  200.                         'cause' => 'different_agentId'
  201.                     ], 
  202.                     200
  203.                 );
  204.             }
  205.         }
  206.         return $this->json(
  207.             ['stripe_checkout' => 'successfully'], 
  208.             200
  209.         );
  210.     }
  211.     
  212.     /**
  213.      * @Route("/inscription/agent/stripe/subscription/plan/check", name="agent_stripe_subscription_plan_account_execute")
  214.      */
  215.     public function agent_stripe_subscription_plan_account_execute(Request $request)
  216.     {
  217.         $sessionAgentId =  $this->session->get('agentId');
  218.         /** @var User $agent */
  219.         $agent $this->getUser();
  220.         if ($agent) {
  221.             $sessionAgentId $agent->getId();
  222.         }
  223.         /** @var User */
  224.         $user $this->userRepository->find($sessionAgentId);
  225.         
  226.         $dataPostAjax $request->getContent();
  227.         $jsonToArray =  json_decode($dataPostAjaxtrue);
  228.         $stripePriceId $jsonToArray["data"]["stripePriceId"];
  229.         $paymentMethodId $jsonToArray["data"]["paymentMethodId"];
  230.         $stripePriceName $jsonToArray["data"]["stripePriceName"]; 
  231.         $planSubscriptionId $jsonToArray["data"]["planSubscriptionId"]; 
  232.         if ($request->getMethod() === "POST") {
  233.             $sessionAgentId_Post intval($jsonToArray["data"]['sessionAgentId']);
  234.             if ($sessionAgentId_Post === $sessionAgentId) {
  235.                 $user $this->userRepository->find($sessionAgentId_Post);
  236.                 $this->stripeManager->persistAgentSubscriptionPlan($stripePriceId$paymentMethodId$stripePriceName$planSubscriptionId$user);
  237.             }else{
  238.                 return $this->json(
  239.                     [
  240.                         'stripe_subscription_plan' => 'error',
  241.                         'cause' => 'different_agentId'
  242.                     ], 
  243.                     200
  244.                 );
  245.             }
  246.         }
  247.         return $this->json([
  248.             'stripe_subscription_plan' => 'successfully'
  249.         ]);
  250.     }
  251. }