<?php
/*
* Unauthorized copying of this file, via any medium is strictly prohibited
* Proprietary and confidential.
*
* @author Bilel AZRI <azri.bilel@gmail.com>
* @author Assma BEN SASSI <bensassiasma.bws@gmail.com>
*
* Bicking man (c) 2019-present.
*/
declare(strict_types=1);
namespace App\Controller\Front;
use _HumbugBox373c0874430e\Symfony\Component\Finder\Exception\AccessDeniedException;
use App\Entity\Course\Course;
use App\Entity\Course\CourseUserSubscription;
use App\Entity\Course\CourseUserTransfert;
use App\Entity\Document\Document;
use App\Entity\Facture\Facture;
use App\Entity\Document\DocumentModel;
use App\Enum\DocumentStatusEnum;
use App\Enum\DocumentModelTypeEnum;
use App\Entity\User\User;
use App\Enum\CourseUserSubscriptionCategoryEnum;
use App\Enum\CourseUserSubscriptionPaymentStatusEnum;
use App\Enum\DocumentTypeEnum;
use App\Form\Front\Course\CourseUserSubscriptionType;
use App\Form\Front\Course\CourseUserTransfertType;
use App\Form\Front\Course\CourseUserInvitationType;
use App\Form\Front\Course\DocumentType;
use App\Repository\Course\CourseRepository;
use App\Repository\Course\CourseUserSubscriptionRepository;
use App\Repository\Course\CourseUserTransfertRepository;
use App\Repository\Document\DocumentRepository;
use App\Repository\Facture\FactureRepository;
use App\Repository\User\ParticipantRepository;
use App\Entity\Promo\Code;
use App\Form\Back\Promo\CodeType;
use App\Repository\Promo\CodeRepository;
use App\Service\CurrentUserGetterService;
use App\Service\PaypalService;
use App\Service\StripeNewService;
use Doctrine\ORM\EntityManagerInterface;
use PayPal\Exception\PayPalConnectionException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
//use PayPal\v1\Payments\PaymentCreateRequest;
//use PayPal\Core\PayPalHttpClient;
//use PayPal\Core\ProductionEnvironment;
use PayPalCheckoutSdk\Core\PayPalHttpClient;
use PayPalCheckoutSdk\Core\ProductionEnvironment;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
use PayPalHttp\HttpRequest;
use PayPalHttp\HttpResponse;
/**
* @Route("/course", name="course.")
* */
class CourseController
{
private Environment $twig;
private UrlGeneratorInterface $urlGenerator;
private DocumentRepository $DocumentRepository;
private FactureRepository $FactureRepository;
private CourseRepository $repository;
private FormFactoryInterface $formFactory;
private FlashBagInterface $flashBag;
private CurrentUserGetterService $currentUserGetterService;
private CourseUserSubscriptionRepository $courseUserSubscriptionRepository;
private CourseUserTransfertRepository $CourseUserTransfertRepository;
private CodeRepository $CodeRepository;
private EventDispatcherInterface $dispatcher;
private EntityManagerInterface $entityManager;
private MailerInterface $mailer;
private PaypalService $paypalService;
private StripeNewService $stripeService;
private TranslatorInterface $translator;
private ParticipantRepository $ParticipantRepository;
public function __construct(Environment $twig, UrlGeneratorInterface $urlGenerator, DocumentRepository $DocumentRepository, FormFactoryInterface $formFactory,
CourseRepository $repository, FlashBagInterface $flashBag, MailerInterface $mailer, TranslatorInterface $translator,
CourseUserTransfertRepository $CourseUserTransfertRepository, CourseUserSubscriptionRepository $courseUserSubscriptionRepository, EventDispatcherInterface $dispatcher,
ParticipantRepository $ParticipantRepository, StripeNewService $stripeService, FactureRepository $FactureRepository, CurrentUserGetterService $currentUserGetterService, CodeRepository $CodeRepository, EntityManagerInterface $entityManager, PaypalService $paypalService)
{
$this->twig = $twig;
$this->urlGenerator = $urlGenerator;
$this->DocumentRepository = $DocumentRepository;
$this->FactureRepository = $FactureRepository;
$this->repository = $repository;
$this->formFactory = $formFactory;
$this->flashBag = $flashBag;
$this->currentUserGetterService = $currentUserGetterService;
$this->courseUserSubscriptionRepository = $courseUserSubscriptionRepository;
$this->CourseUserTransfertRepository = $CourseUserTransfertRepository;
$this->CodeRepository = $CodeRepository;
$this->dispatcher = $dispatcher;
$this->entityManager = $entityManager;
$this->mailer = $mailer;
$this->paypalService = $paypalService;
$this->translator = $translator;
$this->stripeService = $stripeService;
$this->ParticipantRepository = $ParticipantRepository;
}
/**
* @Route("/", name="index",
* methods={"GET", "POST"},
* )
*/
public function index(): Response
{
$courseUserSubscriptions = $this->courseUserSubscriptionRepository->findBy([
'paymentStatus' => 2,
]);
foreach ($courseUserSubscriptions as $sub) {
$subscriptionParent = $this->courseUserSubscriptionRepository->findOneBy([
'child' => $sub->getId(),
]);
if($subscriptionParent != null){
$subscriptionParent->setChild(null);
$this->courseUserSubscriptionRepository->save($subscriptionParent);
}
$this->entityManager->remove($sub);
$this->entityManager->flush();
}
//$courses = $this->repository->findAll();
$courses = $this->repository->createQueryBuilder('d')
->where('d.bloqueCourse = false or d.bloqueCourse IS NULL')
//->andWhere('d.openingDate <= :datenow')
//->andWhere('d.closingDate > :datenow')
//->setParameter('datenow', new \DateTIME('NOW'))
->addOrderBy('d.startDate', 'ASC')
->getQuery()
->getResult();
return new Response($this->twig->render('front/course/index.html.twig', [
'courses' => $courses,
]));
}
/**
* @Route("/{id}/show", name="show",
* methods={"GET"},
* )
*/
public function show(Request $request, Course $course): Response
{
$course = $this->repository->find($request->get('id'));
if (null === $user = $this->currentUserGetterService->getUser()) {
$courseUserSubscription = null;
}else{
$courseUserSubscription = $this->entityManager->getRepository(CourseUserSubscription::class)->findOneBy([
'course' => $course->getId(),
'createdBy' => $user->getId(),
]);
if($courseUserSubscription != null){
if($courseUserSubscription->getPaymentStatus() == 2){
$subscriptionParent = $this->courseUserSubscriptionRepository->findOneBy([
'child' => $courseUserSubscription->getId(),
]);
if($subscriptionParent != null){
$subscriptionParent->setChild(null);
$this->courseUserSubscriptionRepository->save($subscriptionParent);
}
$this->entityManager->remove($courseUserSubscription);
$this->entityManager->flush();
}
}
}
//$intent = $this->stripeService->paymentIntent($course);
return new Response($this->twig->render('front/course/show.html.twig', [
'course' => $course,
'courseUserSubscription' => $courseUserSubscription,
'stripe_public_key_live' => $_ENV["STRIPE_PUBLIC_KEY_LIVE"],
//'intentSecret' => $intent['client_secret'],
]));
}
/**
* @Route("/subscriptionsUser", name="subscriptionsUser",
* methods={"GET"},
* )
*/
public function subscriptionsUser(Request $request): Response
{
$courseUserSubscriptions = $this->courseUserSubscriptionRepository->createQueryBuilder('u')
->where('u.status != 0')
->andWhere('u.createdBy = :createdBy')
->setParameter('createdBy', $this->currentUserGetterService->getUser())
->getQuery()
->getResult();
if (null === $user = $this->currentUserGetterService->getUser()) {
//throw new AccessDeniedException();
return new RedirectResponse($this->urlGenerator->generate('front.security.app_login'));
}
/*foreach ($courseUserSubscriptions as $sub) {
$allfilesApprouved = true;
$otherDocs = [];
foreach ($sub->getCourse()->getDocumentModels() as $document) {
$docFound = false;
//$documentModelsEvent = $this->entityManager->getRepository(DocumentModel::class)->findAll();
$docUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type and d.LastDoc = true and d.status = 4')
->setParameter('user', $user->getId())
->setParameter('type', $document->getId())
->getQuery()
->getResult();
foreach ($docUser as $doc) {
if ($document->translate('fr')->getname() === $doc->getModel()->translate('fr')->getname()) {
$docFound = true;
}
}
if (true === $docFound) {
$otherDocs[] = $document->translate('fr')->getname();
}
if (null == $docUser) {
$allfilesApprouved = false;
}
}
//////Asma - Documents globales
//var_dump(count($otherDocs));
//var_dump(count($sub->getCourse()->getDocumentModels()));
if(count($sub->getCourse()->getDocumentModels())>1){
$pourcentageDoc = (80 / count($sub->getCourse()->getDocumentModels())) * count($otherDocs);
}else{
if(count($otherDocs)>0){
$pourcentageDoc = 80 * count($otherDocs);
}else{
$pourcentageDoc = 80;
}
}
$sub->setProgressiveStatus(intval($pourcentageDoc) + 20);
}
$this->entityManager->flush();
*/
$courseUserInvitations = $this->courseUserSubscriptionRepository->findBy([
'secondParticipantEmail' => $this->currentUserGetterService->getUser()->getEmail(),
]);
return new Response($this->twig->render('front/course/subscriptionsUser.html.twig', [
'courseUserSubscription' => $courseUserSubscriptions,
'courseUserInvitations' => $courseUserInvitations
]));
}
/**
* @Route("/invitationsUser", name="invitationsUser",
* methods={"GET"}, options={"expose": true}
* )
*/
public function invitationsUser(Request $request): Response
{
if (null === $user = $this->currentUserGetterService->getUser()) {
//throw new AccessDeniedException();
return new RedirectResponse($this->urlGenerator->generate('front.security.app_login'));
}
$courseUserInvitations = $this->courseUserSubscriptionRepository->findBy([
'secondParticipantEmail' => $this->currentUserGetterService->getUser()->getEmail(),
'child' => null
]);
return new Response($this->twig->render('front/course/invitationsUser.html.twig', [
'courseUserSubscription' => $courseUserInvitations
]));
}
/**
* @Route("/deleteInvitation", name="deleteInvitation",
* methods={"GET"},
* )
*/
public function deleteInvitation(Request $request): Response
{
$courseUserInvitations = $this->courseUserSubscriptionRepository->findOneBy([
'id' => $request->get('id')
]);
$courseUserInvitations
->setChild(null)
->setCategory(CourseUserSubscriptionCategoryEnum::SOLO)
->setSecondParticipant(null)
->setSecondParticipantName(null)
->setSecondParticipantLastname(null)
->setSecondParticipantEmail(null);
$this->courseUserSubscriptionRepository->save($courseUserInvitations);
$this->sendMailInvitationRemovedCourse($courseUserInvitations);
return new Response("true");
}
/**
* @Route("/update-subscription-document", name="update_subscription_document",
* methods={"GET", "POST"},
* )
*/
public function updateSubscriptionDocument(Request $request): Response
{
$document = new Document();
$form = $this->formFactory->create(DocumentType::class, $document, [
'action' => $this->urlGenerator->generate('front.course.update_subscription_document'),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$document->setLastDoc(true);
$this->entityManager->flush();
$this->flashBag->add('success', $this->translator->trans('Le document a été modifié avec succès!'));
}
return new Response($this->twig->render('front/course/_form_document.html.twig', [
'form' => $form->createView(),
]));
}
/**
* @Route("/{id}/singleSubscriptionsUser", name="singleSubscriptionsUser",
* methods={"GET", "POST"},
* options={ "expose": true },
* )
*/
public function singleSubscriptionsUser(Request $request, Course $course): Response
{
if (null === $user = $this->currentUserGetterService->getUser()) {
//throw new AccessDeniedException();
return new RedirectResponse($this->urlGenerator->generate('front.security.app_login'));
}
$courseUserSubscription = $this->entityManager->getRepository(CourseUserSubscription::class)->findOneBy([
'course' => $course->getId(),
'createdBy' => $user->getId(),
]);
if (null === $courseUserSubscription || null === $course) {
return new Response($this->twig->render('front/home/errorpage.html.twig', ['errorMessage' => "L'inscription à la course a été supprimé"]));
}
$allfilesApprouved = true;
$otherDocs = [];
$allDocsUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.LastDoc = true')
->setParameter('user', $user->getId())
->getQuery()
->getResult();
$pourcentageDocCourse = $this->courseUserSubscriptionRepository->calculPourcDocCourse($courseUserSubscription,$allDocsUser);
$courseUserSubscription->setProgressiveStatus($pourcentageDocCourse);
$this->entityManager->persist($courseUserSubscription);
foreach ($courseUserSubscription->getCourse()->getDocumentModels() as $document) {
$docFound = false;
//$documentModelsEvent = $this->entityManager->getRepository(DocumentModel::class)->findAll();
$docUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type and d.LastDoc = true and d.status = 4')
->setParameter('user', $user->getId())
->setParameter('type', $document->getId())
->getQuery()
->getResult();
foreach ($docUser as $doc) {
if ($document->translate('fr')->getname() === $doc->getModel()->translate('fr')->getname()) {
$docFound = true;
}
}
if (true === $docFound) {
$otherDocs[] = $document->translate('fr')->getname();
}
if (null == $docUser) {
$allfilesApprouved = false;
}
}
//var_dump(count($otherDocs));
//var_dump(count($sub->getCourse()->getDocumentModels()));
//Asmaa A garder ancien calcul % Course
/* if(count($courseUserSubscription->getCourse()->getDocumentModels())>1){
$pourcentageDoc = (80 / count($courseUserSubscription->getCourse()->getDocumentModels())) * count($otherDocs);
}else{
if(count($otherDocs)>0){
$pourcentageDoc = 80 * count($otherDocs);
}else{
$pourcentageDoc = 80;
}
}
$courseUserSubscription->setProgressiveStatus(intval($pourcentageDoc) + 20);*/
$this->entityManager->flush();
$documents = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.LastDoc = true')
->setParameter('user', $this->currentUserGetterService->getUser())
->addOrderBy('d.updatedAt', 'DESC')
->getQuery()
->getResult();
return new Response($this->twig->render('front/course/singleSubscriptionsUser.html.twig', [
'sub' => $courseUserSubscription,
'documents' => $documents,
'documentModelsEvent' => $course->getDocumentModels(),
]));
}
/**
* @Route("/{id}/singleInvitationsUser", name="singleInvitationsUser",
* methods={"GET", "POST"},
* options={ "expose": true },
* )
*/
public function singleInvitationsUser(Request $request, Course $course): Response
{
if (null === $user = $this->currentUserGetterService->getUser()) {
//throw new AccessDeniedException();
return new RedirectResponse($this->urlGenerator->generate('front.security.app_login'));
}
$courseUserSubscription = $this->entityManager->getRepository(CourseUserSubscription::class)->findOneBy([
'course' => $course->getId(),
'secondParticipantEmail' => $user->getEmail(),
]);
if (null === $courseUserSubscription || null === $course) {
return new Response($this->twig->render('front/home/errorpage.html.twig', ['errorMessage' => "L'inscription à la course a été supprimé"]));
}
return new Response($this->twig->render('front/course/singleInvitationUser.html.twig', [
'sub' => $courseUserSubscription,
]));
}
/**
* @IsGranted("IS_AUTHENTICATED_REMEMBERED")
* @Route("/{id}/subscribeInvited", name="subscribeInvited",
* methods={"GET", "POST"},
* )
*/
public function subscribeInvited(Request $request, Course $course): Response
{
$flashBagMessage = 'L\'inscription a été effectué avec succès!';
$courseUserSubscriptionFirst = $this->courseUserSubscriptionRepository->findOneBy([
'course' => $course->getId(),
'secondParticipantEmail' => $this->currentUserGetterService->getUser()->getEmail(),
]);
$newSubscription = $this->courseUserSubscriptionRepository->findOneBy([
'course' => $course->getId(),
'createdBy' => $this->currentUserGetterService->getUser(),
]);
if (null === $newSubscription) {
$flashBagMessage = 'L\'inscription a été effectuée avec succès!';
$newSubscription = new CourseUserSubscription();
$newSubscription->setCourse($course);
}
$form = $this->formFactory->create(CourseUserInvitationType::class, $newSubscription, [
'action' => $this->urlGenerator->generate('front.course.subscribeInvited', [
'id' => $course->getId(),
]),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//$newSubscription = new CourseUserSubscription();
$newSubscription
->setParent($courseUserSubscriptionFirst)
->setIsChild(true)
->setCategory(CourseUserSubscriptionCategoryEnum::DUO)
->setCourse($courseUserSubscriptionFirst->getCourse())
->setPrice($courseUserSubscriptionFirst->getPrice())
->setAcceptContrat(true)
->setAcceptConditionsG(true)
->setAcceptPolitique(true)
->setSecondParticipant($courseUserSubscriptionFirst->getCreatedBy())
->setSecondParticipantName($courseUserSubscriptionFirst->getCreatedBy()->getName())
->setSecondParticipantLastname($courseUserSubscriptionFirst->getCreatedBy()->getLastname())
->setSecondParticipantEmail($courseUserSubscriptionFirst->getCreatedBy()->getEmail())
->setReference(uniqid('', false))
->setBrandStripe($request->get('stripeIntentPaymentMethod'))
->setIdChargeStripe($request->get('stripeIntentId'))
->setLast4Stripe($request->get('stripeSubscription'))
->setStatusStripe($request->get('stripeIntentStatus'))
->setPaymentStatus(CourseUserSubscriptionPaymentStatusEnum::APPROVED)
->setProgressiveStatus(0);
$price = (float)$courseUserSubscriptionFirst->getCourse()->getPrice();
foreach ($newSubscription->getPaidOptions() as $paidOption) {
$price += (float) $paidOption->getRate();
$newSubscription->addPaidOption($paidOption);
}
/*foreach ($courseUserSubscriptionFirst->getPaidOptions() as $paidOption) {
$price += (float) $paidOption->getRate();
$newSubscription->addPaidOption($paidOption);
}*/
if($request->get('codePromo') != null){
$codePromo = $this->CodeRepository->findOneBy([
'code' => $request->get('codePromo'),
]);
if($codePromo != null){
$newSubscription->setCode($codePromo);
$reduc = 0;
if($codePromo->getType() == 4){
$reduc = ($price*$codePromo->getReduction())/100;
}else{
$reduc = (float)$codePromo->getReduction();
}
// Frais Service
$newPrice = $price - $reduc;
$newPrice += ($newPrice*5)/100;
}
}else{
$newPrice = $price + ($price*5)/100;
}
if($newPrice < 0){ $newPrice = 0;}
$newSubscription->setPrice(strval($newPrice));
$this->courseUserSubscriptionRepository->save($newSubscription);
$courseUserSubscriptionFirst->setChild($newSubscription);
$this->courseUserSubscriptionRepository->save($courseUserSubscriptionFirst);
$oldUrl = $this->urlGenerator->generate('front.course.singleSubscriptionsUser', [
'id' => $newSubscription->getCourse()->getId(),
]);
return new RedirectResponse($this->urlGenerator->generate('front.course.subscribe_payment_success',[
'subscription_id' => (string) $newSubscription->getId(),
'old_url' => $oldUrl
]));
/*
return new JsonResponse([
'status' => 'success',
'Subid' => $newSubscription->getId(),
'message' => $flashBagMessage,
]);
*/
}
return new Response($this->twig->render('front/course/_invitation-form.html.twig', [
'course' => $course,
'form' => $form->createView(),
'courseUserSubscription' => $courseUserSubscriptionFirst,
'stripe_public_key_live' => $_ENV["STRIPE_PUBLIC_KEY_LIVE"]
]));
}
/**
* @IsGranted("IS_AUTHENTICATED_REMEMBERED")
* @Route("/{id}/subscribe", name="subscribe",
* methods={"GET", "POST"},
* )
*/
public function subscribe(Request $request, Course $course): Response
{
$flashBagMessage = 'L\'inscription a été modifiée avec succès!';
$courseUserSubscription = $this->courseUserSubscriptionRepository->findOneBy([
'course' => $course->getId(),
'createdBy' => $this->currentUserGetterService->getUser(),
]);
if (null === $courseUserSubscription) {
$flashBagMessage = 'L\'inscription a été effectuée avec succès!';
$courseUserSubscription = new CourseUserSubscription();
$courseUserSubscription->setCourse($course);
}
$form = $this->formFactory->create(CourseUserSubscriptionType::class, $courseUserSubscription, [
'action' => $this->urlGenerator->generate('front.course.subscribe', [
'id' => $course->getId(),
]),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//$courseUserSubscription->setCourse($course);
$courseUserSubscription->setReference(uniqid('', false));
$courseUserSubscription->setBrandStripe($request->get('stripeIntentPaymentMethod'));
$courseUserSubscription->setIdChargeStripe($request->get('stripeIntentId'));
$courseUserSubscription->setLast4Stripe($request->get('stripeSubscription'));
$courseUserSubscription->setStatusStripe($request->get('stripeIntentStatus'));
$price = (float)$courseUserSubscription->getPrice();
if($request->get('codePromo') != null){
$codePromo = $this->CodeRepository->findOneBy([
'code' => $request->get('codePromo'),
]);
if($codePromo != null){
$courseUserSubscription->setCode($codePromo);
$reduc = 0;
if($codePromo->getType() == 4){
$reduc = ($price*$codePromo->getReduction())/100;
}else{
$reduc = (float)$codePromo->getReduction();
}
// Frais Service
$newPrice = $price - $reduc;
$newPrice += ($newPrice*5)/100;
}
}else{
$newPrice = $price + ($price*5)/100;
}
if($newPrice < 0){ $newPrice = 0;}
$courseUserSubscription->setPrice(strval($newPrice));
if (CourseUserSubscriptionCategoryEnum::SOLO === $courseUserSubscription->getCategory()) {
$courseUserSubscription
->setSecondParticipant(null)
->setSecondParticipantEmail(null);
}
$courseUserSubscription->setPaymentStatus(CourseUserSubscriptionPaymentStatusEnum::APPROVED);
$courseUserSubscription->setProgressiveStatus(0);
$this->courseUserSubscriptionRepository->save($courseUserSubscription);
$oldUrl = $this->urlGenerator->generate('front.course.singleSubscriptionsUser', [
'id' => $courseUserSubscription->getCourse()->getId(),
]);
return new RedirectResponse($this->urlGenerator->generate('front.course.subscribe_payment_success',[
'subscription_id' => (string) $courseUserSubscription->getId(),
'old_url' => $oldUrl
]));
}
//$intent = $this->stripeService->paymentIntent($course);
return new Response($this->twig->render('front/course/_subscription-form.html.twig', [
'course' => $course,
'form' => $form->createView(),
'stripe_public_key_live' => $_ENV["STRIPE_PUBLIC_KEY_LIVE"],
//'intentSecret' => $intent['client_secret'],
]));
}
/**
* @Route("/intentSecret", name="intentSecret",
* methods={"GET"},
* options={ "expose": true },
* )
*/
public function intentSecret(Request $request): Response
{
$course = $this->repository->find($request->get('course'));
$intent = $this->stripeService->paymentIntentUpdate($request->get('price'), $course);
return new JsonResponse([
'status' => 'success',
'client_secret' => $intent['client_secret'],
]);
}
/**
* @Route("{courseUserSubscription}/subscribe-payment-payment", name="subscribe_payment",
* methods={"GET"},
* options={ "expose": true },
* )
*/
public function subscribePayment(Request $request, CourseUserSubscription $courseUserSubscription): Response
{
/*$oldUrl = $request->get('old_url');
var_dump($oldUrl);
$request->get('old_url');
echo " laaa ";*/
$oldUrl = $this->urlGenerator->generate('front.course.singleSubscriptionsUser', [
'id' => $courseUserSubscription->getCourse()->getId(),
]);
//var_dump($newUrl);
//exit();
/*
try {
$payment = $this->paypalService->getPayment(
(string)$courseUserSubscription->getId(),
(string)$courseUserSubscription->getPrice(),
'EUR',
$this->urlGenerator->generate('front.course.subscribe_payment_success', [
'subscription_id' => (string) $courseUserSubscription->getId(),
'old_url' => $oldUrl,
],UrlGeneratorInterface::ABSOLUTE_URL),
$this->urlGenerator->generate('front.course.subscribe_payment_cancel', [
'subscription_id' => (string) $courseUserSubscription->getId(),
'old_url' => $oldUrl,
],UrlGeneratorInterface::ABSOLUTE_URL)
);
$clientID = 'Abe0ZVGKbSU6RPW6PtZ2M0lkQjVhig7ncpa57yvjPnhVJBvztXPrXa6EWak8ndaK53AvjjUBKakmk_gE';
$clientSecret = 'EBOz0K16ZMkxvxDrPnER_y3mEzEqcu3asM7yp_gZ92hdXs6r-pE9_3k2qEItUrseGwsVv5IroLnKvHm1';
$environment = new ProductionEnvironment($clientID, $clientSecret); // Use `ProductionEnvironment` for production
$client = new PayPalHttpClient($environment);
$request = new OrdersCaptureRequest($payment->result->id);
$request->prefer('return=representation');
try {
// Call API with your client and get a response for your call
$response = $client->execute($request);
// If call returns body in response, you can get the deserialized version from the result attribute of the response
return ($response);
}catch (HttpException $ex) {
echo $ex->statusCode;
print_r($ex->getMessage());
}
//var_dump($payment);
//exit();
//return new RedirectResponse($payment->result->links[1]->href);
} catch (PayPalConnectionException $ex) {
$this->flashBag->add('warning', 'Oups! quelque chose a mal tourné');
return new RedirectResponse($oldUrl);
$this->urlGenerator->generate('front.course.subscribe_payment_cancel', [
'subscription_id' => (string) $courseUserSubscription->getId(),
'old_url' => $oldUrl,
], UrlGeneratorInterface::ABSOLUTE_URL);
}
*/
return new RedirectResponse($this->urlGenerator->generate('front.course.subscribe_payment_success',[
'subscription_id' => (string) $courseUserSubscription->getId(),
'old_url' => $oldUrl
]));
}
/**
* @Route("/subscribe-payment-success", name="subscribe_payment_success",
* methods={"GET"},
* )
*/
public function subscribePaymentSuccess(Request $request): Response
{
$subscriptionId = $request->get('subscription_id');
$oldUrl = $request->get('old_url');
/** @var CourseUserSubscription $subscription */
$subscription = $this->entityManager->find(CourseUserSubscription::class, $subscriptionId);
$this->flashBag->add('success', 'Votre paiement a bien été enregistré et votre inscription est effectué. Vous avez jusqu\'à '. $subscription->getCourse()->getClosingDate()->format('d-m-Y') .' pour compléter votre inscription et fournir les documents requis ');
$subscription->setPaymentStatus(CourseUserSubscriptionPaymentStatusEnum::APPROVED);
$subscription->setProgressiveStatus(0);
$this->entityManager->flush();
if($subscription->getIsChild() ==1){
$this->sendMailInvitationCourse($subscription);
}else{
$this->sendMailSubscribeCourse($subscription);
}
// Creation de la facture
$date = new \DateTime();
$Laststatement_num = $this->FactureRepository->findOneBy(array(),array('orderKey'=>'DESC'),1,0);
if($Laststatement_num == null) $numInscriment = 1;
else $numInscriment = $Laststatement_num->getOrderKey() + 1;
$numero = $date->format("Ym").sprintf('%04d',$numInscriment);
$facture = new Facture();
$facture
->setUser($subscription->getCreatedBy())
->setSubsciption($subscription)
->setCourse($subscription->getCourse())
->setTotal($subscription->getPrice())
->setStatut("1")
->setOrderKey($numInscriment)
->setNumero($numero);
$this->FactureRepository->save($facture);
$subscription->setFacture($facture);
$this->entityManager->flush();
return new RedirectResponse($oldUrl);
}
/**
* @Route("/subscribe-payment-cancel", name="subscribe_payment_cancel",
* methods={"GET"},
* )
*/
public function subscribePaymentCancel(Request $request): Response
{
$subscriptionId = $request->get('subscription_id');
$oldUrl = $request->get('old_url');
//$this->flashBag->add('warning', 'Oups! quelque chose à mal tourné');
/** @var CourseUserSubscription $subscription */
$subscription = $this->entityManager->find(CourseUserSubscription::class, $subscriptionId);
// $subscription->setPaymentStatus(CourseUserSubscriptionPaymentStatusEnum::REJECTED);
$this->entityManager->remove($subscription);
$this->entityManager->flush();
return new RedirectResponse($oldUrl);
}
/**
* @Route("/", name="renderList",
* methods={"GET"},
* )
*/
public function renderList(Request $request, Course $course): Response
{
$page = (int) $request->get('page', 1);
$subscriptions = $course->getCourseUserSubscriptions();
return new Response($this->twig->render('front/course/renderList.html.twig', [
'subscriptions' => $subscriptions,
]));
}
public function sendMailSubscribeCourse(CourseUserSubscription $courseUserSubscription){
$user = $courseUserSubscription->getCreatedBy();
$emailContent2 = $this->twig->render('emails/user/course_subscription_confirmation.html.twig', [
'subscription' => $courseUserSubscription,
]);
if (null !== $user) {
$email = (new TemplatedEmail())
->from(new Address('app@bikingman.com', 'BikingMan'))
->to((string) $user->getEmail())
->subject('Votre inscription au BikingMan '.$courseUserSubscription->getCourse()->translate('fr')->getname().' #'.$courseUserSubscription->getCourse()->getNumber().' '.$courseUserSubscription->getCourse()->getSeason())
->html($emailContent2)
;
$this->mailer->send($email);
}
if (CourseUserSubscriptionCategoryEnum::DUO === $courseUserSubscription->getCategory()) {
$secondUser = $this->entityManager->getRepository(User::class)
->findOneBy(['email' => $courseUserSubscription->getSecondParticipantEmail()]);
$courseUserSubscription->setSecondParticipant($secondUser);
$emailContent = $this->twig->render('emails/user/course_subscription_second_participant.html.twig', [
'subscription' => $courseUserSubscription,
]);
if (null !== $user) {
$email = (new TemplatedEmail())
->from(new Address('app@bikingman.com', 'BikingMan'))
->to((string) $courseUserSubscription->getSecondParticipantEmail())
->subject('BikingMan - Votre invitation à participer à la course '.$courseUserSubscription->getCourse()->translate('fr')->getname().' #'.$courseUserSubscription->getCourse()->getNumber().' '.$courseUserSubscription->getCourse()->getSeason())
->html($emailContent)
;
$this->mailer->send($email);
}
}
return true;
}
public function sendMailInvitationCourse(CourseUserSubscription $courseUserSubscription){
$user = $courseUserSubscription->getCreatedBy();
$emailContent2 = $this->twig->render('emails/user/course_subscription_confirmation.html.twig', [
'subscription' => $courseUserSubscription,
]);
if (null !== $user) {
$email = (new TemplatedEmail())
->from(new Address('app@bikingman.com', 'BikingMan'))
->to((string) $user->getEmail())
->subject('Votre inscription au BikingMan '.$courseUserSubscription->getCourse()->translate('fr')->getname().' #'.$courseUserSubscription->getCourse()->getNumber().' '.$courseUserSubscription->getCourse()->getSeason())
->html($emailContent2)
;
$this->mailer->send($email);
}
if (CourseUserSubscriptionCategoryEnum::DUO === $courseUserSubscription->getCategory()) {
$secondUser = $this->entityManager->getRepository(User::class)
->findOneBy(['email' => $courseUserSubscription->getSecondParticipantEmail()]);
$courseUserSubscription->setSecondParticipant($secondUser);
$emailContent = $this->twig->render('emails/user/course_subscription_accept_invit.html.twig', [
'subscription' => $courseUserSubscription,
]);
if (null !== $user) {
$email = (new TemplatedEmail())
->from(new Address('app@bikingman.com', 'BikingMan'))
->to((string) $courseUserSubscription->getSecondParticipantEmail())
->subject('BikingMan - L\'invitation à la course '.$courseUserSubscription->getCourse()->translate('fr')->getname().' #'.$courseUserSubscription->getCourse()->getNumber().' '.$courseUserSubscription->getCourse()->getSeason().' a été acceptée.')
->html($emailContent)
;
$this->mailer->send($email);
}
}
return true;
}
public function sendMailInvitationRemovedCourse(CourseUserSubscription $courseUserSubscription){
$user = $courseUserSubscription->getCreatedBy();
$emailContent2 = $this->twig->render('emails/user/course_duo_removed.html.twig', [
'subscription' => $courseUserSubscription,
]);
if (null !== $user) {
$email = (new TemplatedEmail())
->from(new Address('app@bikingman.com', 'BikingMan'))
->to((string) $user->getEmail())
->subject('BikingMan - L\'invitation à la course '.$courseUserSubscription->getCourse()->translate('fr')->getname().' #'.$courseUserSubscription->getCourse()->getNumber().' '.$courseUserSubscription->getCourse()->getSeason().' a été refusée.')
->html($emailContent2)
;
$this->mailer->send($email);
}
return true;
}
/**
* @Route("/document/subscription/{documentModel}", name="document_form_from_course",
* methods={"GET", "POST"},
* )
*/
public function documentFormFromCourse(Request $request, DocumentModel $documentModel): Response
{
$user = $this->currentUserGetterService->getUser();
if ($request->get('subId')) {
$subId = $request->get('subId');
$subscription = $this->entityManager->getRepository(CourseUserSubscription::class)->find($subId);
$document = $this->entityManager->getRepository(Document::class)->findOneBy([
'participant' => $user->getId(),
'model' => $documentModel,
'courseUserSubscription' => $subscription
]);
$document = new Document();
$document->setModel($documentModel);
$document->setParticipant($user);
$document->setType($documentModel->getType());
$document->setLastDoc(true);
$document->setCourseUserSubscription($subscription);
} else {
$subId = null;
}
/** @var DocumentModelTranslation $documentModelTranslation */
$documentModelTranslation = $documentModel->translate();
$form = $this->formFactory->create(DocumentType::class, $document, [
'label' => $documentModelTranslation->getName(),
'action' => $this->urlGenerator->generate('front.course.document_form_from_course', ['documentModel' => (string) $documentModel->getId()]),
]);
$form->handleRequest($request);
//var_dump($documentModelTranslation->getName());
//var_dump($documentModel->getId());exit();
if ($form->isSubmitted() && $form->isValid()) {
$documents = $this->entityManager->getRepository(Document::class)->findOneBy(['participant' => $user->getId(), 'model' => $documentModel]);
if($documentModel->getType() == 2 or $documentModel->getType() == 4){
$docsUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type')
->setParameter('user', $user->getId())
->setParameter('type', $documentModel->getId())
->getQuery()
->getResult();
$nbrDocModel = $this->DocumentRepository->getGlobalandUserDocument();
$user = $this->ParticipantRepository->calculPourcDocUser($user,$nbrDocModel);
$this->entityManager->persist($user);
}else{
$docsUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type and d.courseUserSubscription = :sub')
->setParameter('user', $user->getId())
->setParameter('type', $documentModel->getId())
->setParameter('sub', $subscription->getId())
->getQuery()
->getResult();
}
foreach ($docsUser as $docUser) {
$docUser->setLastDoc(false);
$docUser->setStatus(DocumentStatusEnum::EXPIRED);
$this->entityManager->persist($docUser);
}
$document->setStatus(DocumentStatusEnum::PENDING);
$document->setLastDoc(true);
$this->entityManager->persist($document);
foreach ($user->getDocuments() as $userDocument) {
if (0 === $userDocument->getFiles()->count()) {
$this->entityManager->remove($userDocument);
}
}
$this->entityManager->flush();
$docsUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.LastDoc = true and d.courseUserSubscription = :sub')
->setParameter('user', $subscription->getCreatedBy())
->setParameter('sub', $subscription)
->getQuery()
->getResult();
//$nbrDocModel = $this->DocumentRepository->getNbrDocument($subscription);
$pourcentageDocCourse = $this->courseUserSubscriptionRepository->calculPourcDocCourse($subscription,$docsUser);
$subscription->setProgressiveStatus($pourcentageDocCourse);
$this->entityManager->persist($subscription);
$this->entityManager->flush();
if (!$request->isXmlHttpRequest()) {
$this->flashBag->add('success', 'Les documents ont été téléchargés avec succès!');
return new RedirectResponse($this->urlGenerator->generate('front.course.singleSubscriptionsUser',[
'id' => $subscription->getCourse()->getId(),
]));
/*return new Response($this->twig->render('front/course/singleSubscriptionsUser.html.twig', [
'sub' => $subscription,
'documentModelsEvent' => $documentModel,
]));*/
}
}
return new Response($this->twig->render('front/course/_document-form.html.twig', [
'form' => $form->createView(),
'subId' => $subId,
]));
}
/**
* @Route("/verify_code_promo",
* name="verify_code_promo",
* options={ "expose": true },
* methods={"GET"})
*/
public function verifyCodePromo(Request $request): JsonResponse
{
$courseUserSubscriptions = $this->CodeRepository->findOneBy([
'code' => $request->get('codePromo'),
]);
if($courseUserSubscriptions != null){
return new JsonResponse([
'status' => 'success',
'message' => 'Code promo valide',
'reduc' => $courseUserSubscriptions->getReduction(),
'code' => $courseUserSubscriptions,
'codePromo'=>$courseUserSubscriptions->getCode(),
'type'=>$courseUserSubscriptions->getType(),
]);
}else{
return new JsonResponse([
'status' => 'error',
'message' => 'Code promo non-valide',
'reduc' => 0,
'code' => null,
'codePromo'=>null,
'type' => null
]);
}
}
/**
* @Route("/edit-document-modele-user", name="get_document_modele_user",
* methods={"GET", "POST"},
* )
*/
public function getDocumentModeleUser(Request $request): Response
{
//if($request->get('type') != '8'){
$docUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type and d.LastDoc = true')
->setParameter('user', $request->get('createdBy'))
->setParameter('type', $request->get('type'))
->getQuery()
->getResult();
/*}else{
$docUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.model = :type and d.LastDoc = true and d.courseUserSubscription = :sub')
->setParameter('user', $request->get('createdBy'))
->setParameter('type', $request->get('type'))
->setParameter('sub', $request->get('subscription'))
->getQuery()
->getResult();
}*/
return new Response($this->twig->render('front/course/line_doc_user.html.twig', [
'documents' => $docUser,
'subId' => $request->get('subscription')
]));
}
/**
* @Route("/get-other-document-modele-user", name="get_document_modele_user",
* methods={"GET", "POST"},
* )
*/
public function getOtherDocumentModeleUser(Request $request): Response
{
$otherDocs = [];
$subscription = $this->entityManager->getRepository(CourseUserSubscription::class)->find($request->get('subscription'));
if ($subscription->getCourse() != null) {
$docUser = $this->entityManager->getRepository(Document::class)->createQueryBuilder('d')
->where('d.createdBy = :user and d.LastDoc = true')
->setParameter('user', $subscription->getCreatedBy())
->getQuery()
->getResult();
foreach ($subscription->getCourse()->getDocumentModels() as $modeleCourse) {
$docFound = false;
foreach ($docUser as $doc) {
if ($modeleCourse->translate('fr')->getname() === $doc->getModel()->translate('fr')->getname()) {
if($doc->getType() != 8){
$docFound = true;
}else{
if($doc->getCourseUserSubscription()->getId() == $subscription->getId()){
$docFound = true;
}
}
}
}
if (false === $docFound) {
$otherDocs[] = $modeleCourse;
}
}
}
return new Response($this->twig->render('front/course/line_other_doc_user.html.twig', [
'otherDocs' => $otherDocs,
]));
}
/**
* @Route("/majfactures", name="majfactures",
* methods={"GET"},
* )
*/
public function majfactures(Request $request): Response
{
$found = 0;
$courseUserSubscriptions = $this->courseUserSubscriptionRepository->findAll();
foreach ($courseUserSubscriptions as $sub) {
$facture = $this->FactureRepository->findOneBy([
'subsciption' => $sub,
]);
if($facture != null){
$found ++;
$sub->setFacture($facture);
$this->courseUserSubscriptionRepository->save($sub);
}
}
echo $found;
exit();
}
/**
* @IsGranted("IS_AUTHENTICATED_REMEMBERED")
* @Route("/{id}/transfert", name="transfert",
* methods={"GET", "POST"},
* )
*/
public function transfert(Request $request, Course $course): Response
{
$courseUserSubscription = $this->courseUserSubscriptionRepository->findOneBy([
'course' => $course->getId(),
'createdBy' => $this->currentUserGetterService->getUser(),
]);
if (null === $courseUserSubscription) {
$flashBagMessage = 'L\'inscription a été transférée avec succès!';
$courseUserSubscription = new CourseUserSubscription();
$courseUserSubscription->setCourse($course);
}
$form = $this->formFactory->create(CourseUserTransfertType::class, $courseUserSubscription, [
'action' => $this->urlGenerator->generate('front.course.transfert', [
'id' => $course->getId(),
]),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ancienneCourse = $request->get('ancienneCourse');
$oldCourse = $this->repository->findOneBy([
'id' => $request->get('ancienneCourse'),
]);
$nouvelleCourse = $this->repository->findOneBy([
'id' => $request->get('courseSelect'),
]);
$price = $request->get('price-value-totalInput');
$newCourseSub = new CourseUserSubscription();
$newCourseSub->setCourse($nouvelleCourse);
$newCourseSub->setPrice($price);
$newCourseSub->setReference(uniqid('', false));
$newCourseSub->setBrandStripe($request->get('stripeIntentPaymentMethod'));
$newCourseSub->setIdChargeStripe($request->get('stripeIntentId'));
$newCourseSub->setLast4Stripe($request->get('stripeSubscription'));
$newCourseSub->setStatusStripe($request->get('stripeIntentStatus'));
//$this->courseUserSubscriptionRepository->save($newCourseSub);
$this->entityManager->persist($newCourseSub);
$this->entityManager->flush();
/** Insertion dans la nouvelle table transfert */
$CourseUserTransfert = new CourseUserTransfert();
$CourseUserTransfert->setOldCourse($oldCourse);
$CourseUserTransfert->setNewCourse($nouvelleCourse);
$CourseUserTransfert->setCourseSubscription($newCourseSub);
$CourseUserTransfert->setPrice($price);
$CourseUserTransfert->setParticipant($this->currentUserGetterService->getUser());
$this->entityManager->persist($CourseUserTransfert);
$this->entityManager->flush();
$newCourseSub->setCourseTransfert($CourseUserTransfert);
//CourseUserTransfertRepository
/** Delete ancienne en prenant en consideration si duo **/
$subscriptionTodelete = $this->courseUserSubscriptionRepository->findOneBy([
'course' => $oldCourse,
'createdBy' => $this->currentUserGetterService->getUser()
]);
if($subscriptionTodelete != null){
$documentsCourse = $this->DocumentRepository->findBy([
'courseUserSubscription' => $subscriptionTodelete->getId(),
]);
if($documentsCourse != null){
foreach ($documentsCourse as $document){
$this->entityManager->remove($document);
}
}
$subscriptionParent = $this->courseUserSubscriptionRepository->findOneBy([
'parent' => $subscriptionTodelete->getId(),
]);
$subscriptionChild = $this->courseUserSubscriptionRepository->findOneBy([
'child' => $subscriptionTodelete->getId(),
]);
if($subscriptionParent != null){
$subscriptionParent->setParent(null);
$subscriptionParent->setCategory(CourseUserSubscriptionCategoryEnum::SOLO);
$this->repository->save($subscriptionParent);
$this->entityManager->flush();
}
if($subscriptionChild != null){
$subscriptionChild->setChild(null);
$subscriptionChild->setCategory(CourseUserSubscriptionCategoryEnum::SOLO);
$this->repository->save($subscriptionChild);
$this->entityManager->flush();
}
if (CourseUserSubscriptionCategoryEnum::SOLO === $subscriptionTodelete->getCategory()) {
$subscriptionTodelete->setStatus(0);
$this->courseUserSubscriptionRepository->save($subscriptionTodelete);
$this->entityManager->flush();
// $this->entityManager->remove($subscriptionTodelete);
}else{
$subscriptionTodelete->setStatus(0);
$this->courseUserSubscriptionRepository->save($subscriptionTodelete);
$this->entityManager->flush();
//$this->entityManager->remove($subscriptionTodelete);
}
}
$this->entityManager->flush();
/** End Delete **/
$oldUrl = $this->urlGenerator->generate('front.course.singleSubscriptionsUser', [
'id' => $newCourseSub->getCourse()->getId(),
]);
return new RedirectResponse($this->urlGenerator->generate('front.course.transfert_payment_success',[
'subscription_id' => (string) $newCourseSub->getId(),
'old_url' => $oldUrl
]));
}
//$intent = $this->stripeService->paymentIntent($course);
$courses = $this->repository->createQueryBuilder('d')
->where('d.bloqueCourse = false or d.bloqueCourse IS NULL')
->andWhere('d.openingDate <= :datenow')
->andWhere('d.closingDate > :datenow')
->setParameter('datenow', new \DateTIME('NOW'))
->addOrderBy('d.startDate', 'ASC')
->getQuery()
->getResult();
foreach($courses as $key => $courseSelected){
$sub = $this->courseUserSubscriptionRepository->createQueryBuilder('d')
->where('d.course = :course')
->setParameter('course', $courseSelected->getId())
->getQuery()
->getResult();
if(count($sub) >= $courseSelected->getNumberPlaces() + $courseSelected->getAvailableMargin()){
unset($courses[$key]);
}else{
$subUser = $this->courseUserSubscriptionRepository->createQueryBuilder('d')
->where('d.course = :course and d.createdBy = :user')
->setParameter('course', $courseSelected->getId())
->setParameter('user', $this->currentUserGetterService->getUser())
->getQuery()
->getResult();
if($subUser != null){
unset($courses[$key]);
}
}
}
return new Response($this->twig->render('front/course/_transfert-form.html.twig', [
'course' => $course,
'courses' => $courses,
'form' => $form->createView(),
'stripe_public_key_live' => $_ENV["STRIPE_PUBLIC_KEY_LIVE"],
//'intentSecret' => $intent['client_secret'],
]));
}
/**
* @Route("/transfert-payment-success", name="transfert_payment_success",
* methods={"GET"},
* )
*/
public function transfertPaymentSuccess(Request $request): Response
{
$subscriptionId = $request->get('subscription_id');
$oldUrl = $request->get('old_url');
/** @var CourseUserSubscription $subscription */
$subscription = $this->entityManager->find(CourseUserSubscription::class, $subscriptionId);
$this->flashBag->add('success', 'Votre paiement a bien été enregistré et votre inscription est effectué. Vous avez jusqu\'à '. $subscription->getCourse()->getClosingDate()->format('d-m-Y') .' pour compléter votre inscription et fournir les documents requis ');
$subscription->setPaymentStatus(CourseUserSubscriptionPaymentStatusEnum::APPROVED);
$subscription->setProgressiveStatus(0);
$this->entityManager->flush();
if($subscription->getIsChild() ==1){
$this->sendMailInvitationCourse($subscription);
}else{
$this->sendMailSubscribeCourse($subscription);
}
// Creation de la facture
$date = new \DateTime();
$Laststatement_num = $this->FactureRepository->findOneBy(array(),array('orderKey'=>'DESC'),1,0);
if($Laststatement_num == null) $numInscriment = 1;
else $numInscriment = $Laststatement_num->getOrderKey() + 1;
$numero = $date->format("Ym").sprintf('%04d',$numInscriment);
$facture = new Facture();
$facture
->setUser($subscription->getCreatedBy())
->setSubsciption($subscription)
->setCourse($subscription->getCourse())
->setTotal($subscription->getPrice())
->setStatut("1")
->setOrderKey($numInscriment)
->setNumero($numero);
$this->FactureRepository->save($facture);
$subscription->setFacture($facture);
$this->entityManager->flush();
return new RedirectResponse($oldUrl);
}
/**
* @Route("/get_course_detail",
* name="get_course_detail",
* options={ "expose": true },
* methods={"GET"})
*/
public function getCourseDetail(Request $request): JsonResponse
{
$course = $this->repository->findOneBy([
'id' => $request->get('courseSelect'),
]);
$ancienneCourse = $this->repository->findOneBy([
'id' => $request->get('ancienneCourse'),
]);
if($course != null and $ancienneCourse != null){
if($ancienneCourse->getPrice() >= $course->getPrice()){
$newPrice = $course->getFraisTransfert();
}else{
$newPrice = $course->getPrice() + $course->getFraisTransfert();
}
}else{
$newPrice = 0;
}
if($course != null){
return new JsonResponse([
'status' => 'success',
'course' => $course,
'price' => $newPrice
]);
}else{
return new JsonResponse([
'status' => 'error',
'course' => null,
'price' => null
]);
}
}
}