<?php
namespace App\Controller\Front;
use App\Entity\Educational\Course;
use App\Entity\Management\Subscription\Discount;
use App\Entity\Management\Subscription\Formule;
use App\Entity\Management\Subscription\Offer;
use App\Entity\Management\Subscription\PaymentFutur;
use App\Entity\Management\Subscription\Subscription;
use App\Entity\Management\Subscription\Transaction;
use App\Entity\Management\Subscription\TransactionDashboard;
use App\Entity\Management\Subscription\TransactionTunnel;
use App\Entity\Management\Subscription\TypeOffer;
use App\Entity\Users\Child;
use App\Entity\Users\Parents;
use App\Entity\Users\User;
use App\Entity\Users\StudentsParents;
use App\Form\ParentsRegistrationType;
use App\Form\ParentsRegistrationSecondStepType;
use App\Manager\Purchase\PurchaseTunnelManager;
use App\Service\Brevo;
use App\Service\DataAnalalysisChild;
use App\Service\Mailer\SubscriptionMailer;
use App\Service\StripeService;
use App\Service\JWTService;
use Doctrine\ORM\EntityManagerInterface;
use Stripe\Exception\ApiErrorException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class PurchaseController extends AbstractController
{
// Ne pas effacer
/**
* @return void
* @Route("creation-compte-etape-1")
*/
public function redirectionOldPurchase(Request $request){
$offre = $request->get('offre');
if($offre){
if($offre == "assistance-visio"){
return $this->redirectToRoute('choix-formule-step',['offre'=>'assistance-visio'],301);
}
}
return $this->redirectToRoute('choix-formule-step',['offre'=>'autonomie'],301);
}
/**
* @Route("/choix-formule-etape-1", name="choix-formule-step")
*/
public function stepOne(Request $request, EntityManagerInterface $entityManager){
$user = $this->getUser();
$session = $request->getSession();
$session->set('mode_tunnel_free', true);
if($user){
if($user instanceof Parents || $user instanceof Child ){
if($user instanceof Parents ){
if(!$session->has('mode_tunnel_free')) {
$this->addFlash('notice', 'Pour un nouveau abonnement ou renouveler un abonnement, veuillez cliquer sur "ajouter un autre enfant ou soucrire à une offre".');
return $this->redirectToRoute('account', ['menu' => 'subscription']);
}
$nbr = $entityManager->getRepository(Subscription::class)->listSubOffer($user);
$session->set('mode_tunnel_free', $nbr == 0);
}
if($user instanceof Child){
$last = $entityManager->getRepository(Subscription::class)->getLastSubscriptionByStudent($user);
if($last){
if(!$last->isActif() && $last->getGuardiant()){
$paramerters = array_merge($request->query->all(),['_switch_user'=>$last->getGuardiant()->getEmail()]);
return $this->redirectToRoute('choix-formule-step',$paramerters);
}else{
$this->addFlash('notice','Pour un nouveau abonnement, veuillez cliquer sur "ajouter un autre enfant ou soucrire à une offre".".');
return $this->redirectToRoute('account',[
'menu'=>'subscription',
'_switch_user'=>$last->getGuardiant()->getEmail(),
]);
}
}
}
}
}
$session = $request->getSession();
$get_Offer = $request->get('offre')?(in_array($request->get('offre'),['autonomie','assistance-visio','bac-francais'])?$request->get('offre'):'autonomie'):'autonomie';
$session->set('choice-tunnel-offer',$get_Offer);
$listOffer = [];
$typeOffer = null;
if($get_Offer == "autonomie"){
$typeOffer = $entityManager->getRepository(TypeOffer::class)->findOneBySlug('autonomie');
$priceMark = 13.99;
}else{
$typeOffer = $entityManager->getRepository(TypeOffer::class)->findOneBySlug('visio');
$priceMark = 29.99;
}
if($typeOffer){
$CheepOffer = $entityManager->getRepository(Offer::class)->findOneBy(['typeOffer'=>$typeOffer->getId(),'online'=>1],['price'=>'asc']);
if($CheepOffer){
$priceMark = $CheepOffer->getPrice();
}
$listOffer = $entityManager->getRepository(Offer::class)->findBy(['online'=>1,'typeOffer'=>$typeOffer->getId()],['position'=>'desc']);
}
$offerAssitance = $this->getDoctrine()->getManager()->getRepository(Offer::class)->findOneByslug("abonnement-assistance-22");
$offerMentorat = $this->getDoctrine()->getManager()->getRepository(Offer::class)->findOneByslug("visio-mois-3999");
$offerBacFrancais = $this->getDoctrine()->getManager()->getRepository(Offer::class)->findOneByslug("bac-francais");;
if($request->isMethod('post')){
if($request->request->has('offer')){
$slugOffer = $request->request->get('offer');
$child = $request->request->get('child');
$child = $child??1;
$session->set('child', $child);
$session->set('slugOffer', $slugOffer);
if($request->request->has('discount')){
$slugDiscount = $request->request->get('discount');
$session->set('slugDiscount', $slugDiscount);
}
return $this->redirectToRoute('front-registration-purchase',['offre'=>$get_Offer]);
}
}
$childform = [];
if(!$session->has('mode_tunnel_free')){
$session->set('mode_tunnel_free',true);
}
return $this->render('front/tunnel/step1.html.twig',[
"getOffer" => $get_Offer,
"children" => $childform,
"offerAssitance"=> $offerAssitance,
"offerMentorat" => $offerMentorat,
"offerBacFrancais"=>$offerBacFrancais,
'listOffer'=>array_reverse($listOffer),
'typeOffer'=>$typeOffer,
'priceMark'=>$priceMark,
'getPrice'=>$request->get('price'),
'mode_tunnel'=>$session->has('mode_tunnel'),
'mode_free'=>$session->has('mode_tunnel_free')?$session->get('mode_tunnel_free'):true
]);
}
/**
* @Route("/choix-formule-etape-2", name="front-registration-purchase")
*
*/
public function parentInformationEssaiGratuit(Request $request, EntityManagerInterface $entityManager): Response
{
$session = $request->getSession();
$slugOffer = $session->get('slugOffer');
if($session->has('mode_tunnel') && $session->get('mode_tunnel') == 'renew_sub'){
return $this->redirectToRoute('front_purchase_cb',['offre'=>$slugOffer]);
}
if(!$slugOffer){
return $this->redirectToRoute('choix-formule-step');
}
$nameParent = "";
$profileParent = "parent";
$isNewsletterParent = false;
$isSubmit = false;
$get_Offer = $session->get('choice-tunnel-offer');
$nbr = $session->get('child');
$formOptions['prenom_parent'] = $nameParent;
$formOptions['profil_parent'] = $profileParent;
$formOptions['newsletter_parent'] = $isNewsletterParent;
$formOptions['offer'] = $get_Offer;
$specialiteError = "";
$displaySpecialiteError = false;
$parents = $this->getUser();
$form = $this->createForm(ParentsRegistrationSecondStepType::class, $parents, $formOptions);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $request->request->all();
$session->set('customInfosSecondStep',$data );
$childNbr = count($data["parents_registration_second_step"]["childrenForm"]);
$session->set('child',$childNbr);
return $this->redirectToRoute('front_purchase_cb',['offre'=>$get_Offer]);
}
$isSubmit = true;
}
$slugOffer = $session->get('slugOffer');
$offer = $entityManager->getRepository(Offer::class)->findOneBySlug($slugOffer);
return $this->render('front/tunnel/step2.html.twig', [
'form' => $form->createView(),
'isSubmit' => $isSubmit,
'profilEleveParent' => $profileParent,
'specialiteError' => $specialiteError,
'displaySpecialiteError' => $displaySpecialiteError,
'get_offer' => $get_Offer,
'nbr' => intval($nbr),
'offer' => $offer,
'mode_tunnel'=>$session->has('mode_tunnel')
]);
}
/**
* @Route("/informations-paiement-etape-3", name="front_purchase_cb")
*/
public function recapCB(Request $request,EntityManagerInterface $entityManager, StripeService $stripeService,PurchaseTunnelManager $purchaseTunnelManager){
$em = $this->getDoctrine()->getManager();
$session = $request->getSession();
$get_Offer = $session->get('choice-tunnel-offer');
$customInfosSecondStep = $session->get('customInfosSecondStep');
$discount = $session->get('slugDiscount');
$slugOffer = $session->get('slugOffer');
$offer = $em->getRepository(Offer::class)->findOneBySlug($slugOffer);
$user = $this->getUser();
if($user){
$nbr = $entityManager->getRepository(Subscription::class)->listSubOffer($user);
$session->set('mode_tunnel_free', $nbr == 0);
}
if($this->getUser() && $session->get('mode_tunnel')=='renew_sub'){
$subId = $session->get('sub_id');
$find = $em->getRepository(Subscription::class)->findOneBy(['id'=>$subId]);
$children[] = $find->getStudent();
}else{
if (!$offer || empty($customInfosSecondStep)) {
$this->addFlash('notice', 'Vous n\'êtes pas autorisé');
return $this->redirectToRoute('front');
}
$children = $customInfosSecondStep["parents_registration_second_step"]["childrenForm"];
}
$discount = $em->getRepository(Discount::class)->findOneByCodePromo($discount);
$amount = $offer->getPrice();
$toto = 0;
$i = 0;
$applyDiscountMultiChild = false;
if(!is_null($offer->getDiscount()) && !is_null($discount) ){
if($offer->getDiscount()->getId() == $discount->getId()){
$applyDiscountMultiChild = true;
}
}
foreach ($children as $child){
if($i==0){
if($discount){
if(!is_null($discount->getPercent())){
$toto+=$amount - ($discount->getPercent()*$amount)/100;
}else{
$toto+=$amount - $discount->getAmount();
}
}else{
$toto=+$amount;
}
}
if ($i == 1) {
if(!$applyDiscountMultiChild){
$toto+=$amount - (20*$amount)/100;
}else{
$toto+=$amount - (35*$amount)/100;
}
}
if ($i> 1) {
if(!$applyDiscountMultiChild){
$toto+=$amount - (30*$amount)/100;
}else{
$toto+=$amount - (45*$amount)/100;
}
}
$i++;
}
$amount = round($toto,2);
return $this->render('front/tunnel/step3.html.twig',[
'SPK' =>$stripeService->getPublishableKey(),
'get_Offer'=>$get_Offer,
'children' =>$children,
'offer' =>$offer,
'discount' =>$discount,
'amount' =>$amount,
'mode_tunnel'=>$session->has('mode_tunnel'),
'mode_free'=>$session->has('mode_tunnel_free')?$session->get('mode_tunnel_free'):true
]);
}
/**
* @return JsonResponse
* @Route("/setup/subscription/paiement",name="setup-subscription-paiement")
*/
public function setupSubscriptionIntentPayment_new(Request $request,PurchaseTunnelManager $purchaseTunnelManager, StripeService $stripeService,EntityManagerInterface $entityManager)
{
$session = $request->getSession();
$newParents = false;
if($request->isXmlHttpRequest()){
if (!empty($session->get('slugOffer'))) {
$paymentMethod = $request->request->get('pmId');
if($this->getUser()){
$parents = $this->getUser();
}else{
$newParents = true;
$parents = $purchaseTunnelManager->registrationParentEssaiGratuit();
$entityManager->persist($parents);
$entityManager->flush();
}
$slugOffer = $session->get('slugOffer');
$slugDiscount = $session->get('slugDiscount');
$offer = $entityManager->getRepository(Offer::class)->findOneBySlug($slugOffer);
$coupon = $slugDiscount?$entityManager->getRepository(Discount::class)->findOneByCodePromo($slugDiscount):null;
if($offer){
try {
$parentsInfosData = ['firstname'=>$parents->getFirstname(),'lastname'=>$parents->getLastname(),'phone'=>$parents->getPhone()];
if($session->has('mode_tunnel')){
$tt = new TransactionDashboard();
$tt->setSubscription("new");
$tt->setPaymentIntent("new");
if($session->get('mode_tunnel')=='renew_sub' ){
$subId = $session->get('sub_id');
$tt->setSubscription("renew_sub");
$tt->setSubsStripeId($subId);
}
}else{
$tt = new TransactionTunnel();
$tt->setInfosParents([$parentsInfosData]);
}
if($session->get('mode_tunnel')!='renew_sub' ){
$infosChild = $session->get('customInfosSecondStep')["parents_registration_second_step"]['childrenForm'];
$tt->setInfosChild($infosChild);
}
$tt->setEmailParents($parents->getEmail());
$tt->setCustomer($parents);
$tt->setIsfinish(false);
$tt->setOffer($offer);
$tt->setDiscount($coupon);
$entityManager->persist($tt);
$entityManager->flush();
$freeMode = $session->get('mode_tunnel_free');
$stripeService->createDefaultCardByPaymentMethod($parents,$paymentMethod);
if(!$freeMode){
$data = [
'offer'=>$slugOffer,
'coupon'=>$slugDiscount,
];
$return = $stripeService->createNewSubOnDash($parents,$data);
$tt->setPaymentIntent($return['paymentIntentId']);
$tt->setSubsStripeId($return['subId']);
$entityManager->flush();
return new JsonResponse(['tt'=>$tt->getId(),'success'=>true,'subId'=>$return['subId'],'clientSecret'=>$return['paymentSecretClient'],'payment_id'=>$return['paymentIntentId']]);
}else{
$parameters = [
'usage' => 'off_session',
'payment_method'=>$paymentMethod,
'automatic_payment_methods' => [
'enabled' => true,
],
'payment_method_options' => ['card' => ['request_three_d_secure' => 'automatic']]
];
if(!is_null($parents->getId()) && $parents->getStripeId()){
$parameters['customer'] = $parents->getStripeId();
}
$si = $stripeService->getStripeClient()->setupIntents->create($parameters);
}
$tt->setSetupIntent($si->id);
$entityManager->flush();
return new JsonResponse(['tt'=>$tt->getId(),'success'=>true,'subId'=>null,'clientSecret'=>$si->client_secret,'setup_id'=> $si->id,'pending_id'=>null]);
} catch (\Exception $e) {
if(isset($tt)){
$tt->setCustomer(null);
$entityManager->flush();
}
if($newParents){
$entityManager->remove($parents);
$entityManager->flush();
$stripeService->deleteCustomer($parents->getStripeId());;
}
return new JsonResponse(['success' => false, 'msg'=>$e->getMessage()]);
}
}
}
return new JsonResponse(['success' => false,'msg'=>"Offre n'a pas été sélectionnée"]);
}
return $this->redirectToRoute('');
}
/**
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @Route("/confirm/subscription/paiement/stripe",name="confirm-subscription-2")
*/
public function confirmSubscriptionPayment2(Request $request,PurchaseTunnelManager $purchaseTunnelManager, StripeService $stripeService,EntityManagerInterface $entityManager,Brevo $brevo,SubscriptionMailer $subscriptionMailer)
{
$em = $this->getDoctrine()->getManager();
$now = new \DateTime('now');
$td = null;
$trialDate = clone $now;
$trialDate->modify('+7 days')->modify('-1 minutes');
if($request->query->has('tt_id')){
$tdId = $request->get('tt_id');
$td = $em->getRepository(Transaction::class)->find($tdId);
}
if($request->query->has('setup_intent')){
$payment_intent = $request->get('setup_intent');
if(!$td){
$td = $em->getRepository(Transaction::class)->findOneBy(['setupIntent'=>$payment_intent]);
}
$findPayment = $stripeService->getStripeClient()->setupIntents->retrieve($payment_intent);
}else{
$payment_intent = $request->get('payment_intent');
$pi = $stripeService->getStripeClient()->paymentIntents->retrieve($payment_intent);
if(!$td){
$td = $em->getRepository(Transaction::class)->findOneBy(['paymentIntent'=>$payment_intent]);
if(!$td && $pi && $pi->invoice){
$invoice = $stripeService->getStripeClient()->invoices->retrieve($pi->invoice);
if($invoice->status == 'paid'){
$subscription = $stripeService->getStripeClient()->subscriptions->retrieve($invoice->subscription);
if($subscription){
$td = $em->getRepository(Transaction::class)->findOneBy(['subsStripeId'=>$subscription->id]);
}
}
}
}
$findPayment = $stripeService->getStripeClient()->paymentIntents->retrieve($payment_intent);
}
if( $td && $findPayment->status == 'succeeded'){
$session = $request->getSession();
$applyDiscountMultiChild = false;
if(!is_null($td->getOffer()->getDiscount()) && !is_null($td->getDiscount()) ){
if($td->getOffer()->getDiscount()->getId() == $td->getDiscount()->getId()){
$applyDiscountMultiChild = true;
}
}
if(!$td->isIsfinish()) {
$children = $subscriptions =[];
if ($session->has('mode_tunnel') && $this->getUser()) {
$parents = $this->getUser();
}else{
$parents = $entityManager->getRepository(Parents::class)->findOneBy(['email'=>$td->getEmailParents()]);
}
$clientStripe = $stripeService->createCustomer($parents, $findPayment->payment_method);
$parents->setStripeId($clientStripe->id);
$entityManager->flush();
$stripeService->createDefaultCardByPaymentMethod($parents,$findPayment->payment_method);
if ($session->has('mode_tunnel')) {
if($session->get('mode_tunnel')=='renew_sub'){
$subId = $session->get('sub_id');
$find = $entityManager->getRepository(Subscription::class)->find($subId);
$children[] = $find->getStudent();
}
}
if(!empty($td->getInfosChild())){
foreach ($td->getInfosChild() as $infosChild) {
$child = new Child();
$child->setFirstname($infosChild['firstname']);
$child->setLastname('LBP');
$course = $entityManager->getRepository(Course::class)->find($infosChild['course']);
$child->setCourse($course);
$date = new \DateTime('now');
$date = $date->format('YmdHis');
$uniq = uniqid();
$child->setUsername(uniqid() . '-' . $date);
$child->setEmail(sprintf('%[email protected]', $uniq));
$child->setUsername(sprintf('%[email protected]', $uniq));
$child->setPassword('test');
$child->setEmailValidationToken(0);
$child->setEmailValidationTokenRequestedAt(new \DateTime('now'));
$child->setParentEmail($parents->getEmail());
$child->setRoles(['ROLE_STUDENT']);
if ($td->getOffer()->getTypeOffer() && $td->getOffer()->getTypeOffer()->getSlug() == 'visio') {
$child->setRoles(['ROLE_STUDENT', 'ROLE_MENTORAT']);
}
$entityManager->persist($child);
$entityManager->flush();
$children[] = $child;
}
}
$freeMode = $session->has('mode_tunnel_free')?$session->get('mode_tunnel_free'):true;
$i = $amount = 0;
foreach ($children as $child) {
if($session->get('mode_tunnel')!='renew_sub'){
$studentParents = new StudentsParents();
$studentParents->setStudent($child);
$studentParents->setParents($parents);
$studentParents->setEnabled(true);
$entityManager->persist($studentParents);
$entityManager->flush();
}
$sub = new Subscription();
$sub->setDiscount($td->getDiscount());
$sub->setSubscripted($now);
$sub->setGuardiant($parents);
$sub->setStudent($child);
$sub->setOffer($td->getOffer());
$sub->setBankStripe(true);
$sub->setByChecked(false);
$sub->setIsMobile(false);
if($freeMode){
$sub->setTrialDate($trialDate);
}
$coupon = null;
if($i == 0){
$coupon = $td->getDiscount();
}
if ($i == 1) {
if(!$applyDiscountMultiChild){
$coupon = $entityManager->getRepository(Discount::class)->findOneByStripeId('lbp-rf-2');
}else{
$coupon = $entityManager->getRepository(Discount::class)->findOneByStripeId('LBPCHILD2PROMO');
}
}
if ($i> 1) {
if(!$applyDiscountMultiChild) {
$coupon = $entityManager->getRepository(Discount::class)->findOneByStripeId('lbp-rf-3');
}else{
$coupon = $entityManager->getRepository(Discount::class)->findOneByStripeId('LBPCHILD3PROMO');
}
}
$sub->setDiscount($coupon);
$sub->setPrice($sub->getAmount());
$amount+=$sub->getAmount();
$entityManager->persist($sub);
$entityManager->flush();
if(!$td->getOffer()->isCharge()){
$coupon = $sub->getDiscount();
$items[0]=['price'=>$td->getOffer()->getStripeId()];
if(!is_null($coupon)){
$items[0]['discounts']=[['coupon'=>strtoupper($coupon->getStripeId())]];
}
$data = [
'customer' => $clientStripe->id,
'currency' =>'EUR',
'items' =>$items,
'default_payment_method'=>$findPayment->payment_method,
];
if($freeMode){
$data['off_session'] = true;
$data['trial_end']=$trialDate->getTimestamp();
$subStripe = $stripeService->getStripeClient()->subscriptions->create($data);
$sub->setStripeId($subStripe->id);
}else{
$sub->setStripeId($td->getSubsStripeId());
}
$entityManager->flush();
}
$subscriptions[] = $sub;
$i++;
}
if($td->getOffer()->isCharge() && $freeMode){
$pp = new PaymentFutur();
$pp->setParents($parents);
$pp->setDatePayment($trialDate);
$pp->setPrice($amount);
$entityManager->persist($pp);
$entityManager->flush();
foreach ($subscriptions as $sub) {
$sub->setPaymentFutur($pp);
$entityManager->flush();
}
}
if(!$this->getUser()){
$token = new UsernamePasswordToken($parents, $parents->getPassword(), "main", $parents->getRoles());
$this->get("security.token_storage")->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$dispatcher = new EventDispatcher();
$dispatcher->dispatch($event, "security.interactive_login");
}
if(!is_null($td->getOffer()) && $freeMode){
try{
$typeOffer = $td->getOffer()->getTypeOffer();
if($typeOffer->getSlug() == 'visio'){
$brevo->sendCampaignEmail($parents,[685]);
}
if($typeOffer->getSlug() == 'autonomie'){
$brevo->sendCampaignEmail($parents,[684]);
}
}catch (\Exception $exception){
}
}
$td->setIsfinish(true);
$entityManager->flush();
$paramerters = ["validation"=>$td->getOffer()->getTypeOffer()->getSlug()=='visio'?'assistance-visio':'autonomie'];
if(!$session->has('mode_tunnel')){
$subscriptionMailer->essaiGratuitConfirmationMail($parents,$td->getOffer());
}else{
$paramerters['hasModeDashboard']=1;
}
$isFree = $session->has('mode_tunnel_free')?$session->get('mode_tunnel_free'):true;
$session->clear();
$session->set('confirmationEssaiGratuit', true);
$session->set('toto',$amount);
$session->set('mode_tunnel_free',$isFree);
return $this->redirectToRoute('purchase-success',$paramerters);
//return $this->redirectToRo
}
}
}
/**
* @Route("/process/paiement/subscription",name="front_purchase_parent_checkout",methods={"post"})
*/
public function process(Request $request, StripeService $stripeService, PurchaseTunnelManager $purchaseTunnelManager, SubscriptionMailer $subscriptionMailer,Brevo $brevo)
{
$em = $this->getDoctrine()->getManager();
$offer = null;
if ($request->request->has('token') || $request->request->has('paymentIntent')) {
$session = $request->getSession();
$parents = $purchaseTunnelManager->registrationParentEssaiGratuit();
$em->persist($parents);
$em->flush();
$customerStripeId = $request->request->get('customer');
//$clientStripe = $stripeService->createCustomer($parents);
try{
if ($request->request->has('token')) {
$token = $request->request->get('token');
$stripeService->createDefaultCard($customerStripeId, $token);
$purchaseTunnelManager->processCheckout($parents, null);
}
if ($request->request->has('paymentIntent')) {
$paymentIntent = $request->request->get('paymentIntent');
$paymentMethod = $request->request->get('paymentMethod');
$parents->setStripeId($customerStripeId);
$stripeService->setupFuturPayment2($parents, $paymentMethod);
$purchaseTunnelManager->processCheckout2($parents, $paymentMethod,$paymentIntent);
$slugOffer = $session->get('slugOffer');
$offer = $em->getRepository(Offer::class)->findOneBySlug($slugOffer);
if($offer->getSlug()!='bac-francais'){
$subscriptionMailer->essaiGratuitConfirmationMail($parents,$offer);
}
}
}
catch (ApiErrorException $apiErrorException) {
$link = $em->getRepository(StudentsParents::class)->findByParents($parents->getId());
if(!empty($link)){
foreach ($link as $item){
$em->remove($item);
$em->flush();
}
}
$em->remove($parents);
$em->flush();
// $stripeService->deleteCustomer($customerStripeId);
$this->addFlash('notice','Une erreur est survenue lors de la procédure de paiement.'.$apiErrorException->getMessage());
return $this->redirectToRoute('front_purchase_checkout');
}catch (\ErrorException $exception){
$link = $em->getRepository(StudentsParents::class)->findByParents($parents->getId());
if(!empty($link)){
foreach ($link as $item){
$em->remove($item);
$em->flush();
}
}
// $em->remove($parents);
//$em->flush();
//$stripeService->deleteCustomer($clientStripe["id"]);
$this->addFlash('notice','Une erreur est survenue lors de la procédure de paiement.'.$exception->getMessage());
return $this->redirectToRoute('front_purchase_checkout');
}
// $childInfos = $session->get('customInfos')["parents_registration"]['childrenForm'];
// $subscriptionMailer->firstTrialMail($parents, count($childInfos), $session->get('customOffer') );
// login user
$get_Offer = $session->get('choice-tunnel-offer');
$session->clear();
if(!$this->getUser()){
$token = new UsernamePasswordToken($parents, $parents->getPassword(), "main", $parents->getRoles());
$this->get("security.token_storage")->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$dispatcher = new EventDispatcher();
$dispatcher->dispatch($event, "security.interactive_login");
if(!is_null($offer)){
try{
$typeOffer = $offer->getTypeOffer();
if($typeOffer->getSlug() == 'visio'){
$brevo->sendCampaignEmail($parents,[685]);
}
if($typeOffer->getSlug() == 'autonomie'){
$brevo->sendCampaignEmail($parents,[684]);
}
}catch (\Exception $exception){
}
}
}
$session->set('choice-tunnel-offer',$get_Offer);
$session->set('confirmationEssaiGratuit', true);
return $this->redirectToRoute('purchase-success',["validation"=>$get_Offer]);
}
}
/**
* @param Request $request
* @return JsonResponse
* @Route("/valide-coupon",name="valid_coupon")
*/
public function validCoupon(Request $request, PurchaseTunnelManager $purchaseTunnelManager)
{
if ($request->isXmlHttpRequest()) {
$coupon = $request->get('coupon');
$elem = $purchaseTunnelManager->checkCouponForFirstSubscription($coupon);
if (is_array($elem)) {
return new JsonResponse(['success' => true, 'data' => $elem]);
}
return new JsonResponse(['success' => false]);
}
}
}