<?php namespace App\Controller; use App\Entity\Adherent; use App\Entity\CotisationAdherent; use App\Entity\CotisationPrestataire; use App\Entity\Payment; use App\Entity\Prestataire; use App\Entity\User; use App\Enum\MoyenEnum; use App\Form\Type\CotiserFormType; use App\Form\Type\UserInfosFormType; use App\Utils\OperationUtils; use Doctrine\ORM\EntityManagerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Security; use Symfony\Component\Translation\TranslatorInterface; class UserController extends AbstractController { private $em; private $translator; private $security; private $operationUtils; public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, Security $security, OperationUtils $operationUtils) { $this->em = $em; $this->translator = $translator; $this->security = $security; $this->operationUtils = $operationUtils; } /** * @Route("/cotiser", name="cotiser") * @IsGranted("ROLE_USER") */ public function cotiserAction(Request $request) { $options = []; $payment_type = ''; if ($this->security->getUser()->isGranted('ROLE_ADHERENT')) { $options['data_class'] = CotisationAdherent::class; $payment_type = Payment::TYPE_COTISATION_ADHERENT; } elseif ($this->security->getUser()->isGranted('ROLE_PRESTATAIRE')) { $options['data_class'] = CotisationPrestataire::class; $payment_type = Payment::TYPE_COTISATION_PRESTA; } $form = $this->createForm(CotiserFormType::class, null, $options); $form->handleRequest($request); if ($form->isSubmitted()) { $cotisation = $form->getData(); if ($form->isValid()) { if (MoyenEnum::MOYEN_MLC == $cotisation->getMoyen()) { try { $cotisation->setRecu(true); $this->operationUtils->executeOperations($cotisation); $this->addFlash( 'success', // "Cotisation pour l'année {$cotisation->getCotisationInfos()->getAnnee()} bien reçue. Merci !" $this->translator->trans('Cotisation bien reçue. Merci !') ); } catch (\Exception $e) { $this->addFlash( 'error', $this->translator->trans('Problème avec la cotisation !') . ' ' . $e->getMessage() ); } return $this->redirectToRoute('index'); } else { // Redirect to payment page return $this->forward('App\Controller\FluxController::preparePaymentAction', [ 'form' => $form, 'type' => $payment_type, ]); } } else { $this->addFlash( 'error', $this->translator->trans('Problème avec la cotisation !') . ' ' . $form->getErrors() ); } } return $this->render('@kohinos/cotiser.html.twig', [ 'form' => $form->createView(), ]); } /** * @Route("/userinfos", name="user_infos") * @IsGranted("ROLE_USER") */ public function userInfosAction(Request $request) { $form = $this->createForm(UserInfosFormType::class, $this->getUser()); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $this->em->persist($form->getData()); $this->em->flush(); $this->addFlash( 'success', $this->translator->trans("Infos de l'utilisateur modifiée !") ); $referer = $request->headers->get('referer'); if ($referer && !$request->isXmlHttpRequest()) { return $this->redirect($referer); } elseif (!$request->isXmlHttpRequest()) { return new Response('', Response::HTTP_BAD_REQUEST); } } return $this->redirectToRoute('index'); // return $this->render('@kohinos/presta/infos.html.twig', array( // 'form' => $form->createView() // )); } /** * @Route("/account/user", name="myaccount") * @IsGranted("ROLE_USER") */ public function myaccountAction(Request $request) { return $this->render('@kohinos/common/myaccount.html.twig', [ ]); } /** * @Route("/user/achatMonnaieAConfirmer", name="achatMonnaieAConfirmer") * @IsGranted({"ROLE_ADHERENT", "ROLE_PRESTATAIRE"}) */ public function achatMonnaieAConfirmerAction(Request $request) { $obj = $this->operationUtils->getCurrentAccountable($this->security->getUser()); if ($obj instanceof Prestataire) { return $this->redirectToRoute('achatMonnaieAConfirmerPrestataire'); } elseif ($obj instanceof Adherent) { return $this->redirectToRoute('achatMonnaieAConfirmerAdherent'); } return $this->redirectToRoute('index'); } /** * @Route("/user/listachatMonnaieAConfirmer", name="listachatMonnaieAConfirmer") * @IsGranted({"ROLE_ADHERENT", "ROLE_PRESTATAIRE"}) */ public function listachatMonnaieAConfirmerAction(Request $request) { $obj = $this->operationUtils->getCurrentAccountable($this->security->getUser()); if ($obj instanceof Prestataire) { return $this->redirectToRoute('listachatMonnaieAConfirmerPrestataire'); } elseif ($obj instanceof Adherent) { return $this->redirectToRoute('listachatMonnaieAConfirmerAdherent'); } return $this->redirectToRoute('index'); } }