src/Controller/ProfilController.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Child;
  4. use App\Entity\PaidCourseList;
  5. use App\Entity\PasswordUpdate;
  6. use App\Entity\SessionOrder;
  7. use App\Entity\SubscriptionOrder;
  8. use App\Entity\User;
  9. use App\Form\AccountType;
  10. use App\Form\ChildEditType;
  11. use App\Form\ChildType;
  12. use App\Form\PasswordUpdateType;
  13. use App\Form\PasswordUserUpdateType;
  14. use App\Repository\DiscountRepository;
  15. use App\Repository\HolidayRepository;
  16. use App\Repository\PaidCourseListRepository;
  17. use App\Repository\SessionOrderRepository;
  18. use App\Repository\SessionRegistrationDateRepository;
  19. use App\Service\DatafastService;
  20. use App\Repository\SubscriptionOrderRepository;
  21. use App\Repository\TicketOrderRepository;
  22. use App\Repository\UserPlacementTestRepository;
  23. use App\Repository\UserRepository;
  24. use App\Repository\VideoCoursesRegistrationRepository;
  25. use Doctrine\ORM\EntityManagerInterface;
  26. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\Form\FormError;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  33. /**
  34. * Class ProfilController
  35. * @Route("/user")
  36. * @Security("is_granted('ROLE_USER')")
  37. */
  38. class ProfilController extends AbstractController
  39. {
  40. /**
  41. * @Route("/dashboard", name="user_dashboard")
  42. */
  43. public function index(HolidayRepository $holidayRepository)
  44. {
  45. $holday = $holidayRepository->findOneBy([
  46. 'id' => 1
  47. ]);
  48. $startHoliday = $holday->getStartAt();
  49. $endHoliday = $holday->getEndAt();
  50. return $this->render('profil/dashboard.html.twig', [
  51. 'user' => $this->getUser(),
  52. 'startHoliday' => $startHoliday,
  53. 'endHoliday' => $endHoliday
  54. ]);
  55. }
  56. /**
  57. * @Route("/thanks", name="confirmation_purchase")
  58. * @return Response
  59. * @param Request $request
  60. * @param UserRepository $userRepository
  61. * @param SubscriptionOrderRepository $subscriptionOrderRepository
  62. * @param SessionOrderRepository $sessionOrderRepository
  63. * @return Response
  64. */
  65. public function confirmationPurchase(
  66. Request $request,
  67. UserRepository $userRepository,
  68. SubscriptionOrderRepository $subscriptionOrderRepository,
  69. SessionOrderRepository $sessionOrderRepository,
  70. DatafastService $datafastService)
  71. {
  72. $isTwoTime = false;
  73. //Type d'order : subscription, group
  74. $orderType = $request->query->get('orderType');
  75. $userId = $request->query->get('userId');
  76. $orderId = $request->query->get('orderId');
  77. $user = $userRepository->findOneBy(['id'=> $userId]);
  78. $currency = '';
  79. if ($orderType == "subscription"){
  80. /** @var SubscriptionOrder $subscriptionOrder */
  81. $subscriptionOrder = $subscriptionOrderRepository->findOneBy(['id'=> $orderId]);
  82. $currency = $subscriptionOrder->getPaymentCurrency();
  83. if ($subscriptionOrder){
  84. $paidAmount = $subscriptionOrder->getPaidAmount();
  85. $startAt = $subscriptionOrder->getCoursesStartAt();
  86. $category = $subscriptionOrder->getCategory();
  87. $program = $subscriptionOrder->getSubject();
  88. $quantity = $subscriptionOrder->getNbOfScheduleChoose();
  89. $isTwoTime = false;
  90. if ($user && $paidAmount > 0) {
  91. $datafastService->recordPayment(
  92. $paidAmount,
  93. $currency,
  94. 'subscription-' . $orderId,
  95. $user->getEmail(),
  96. false
  97. );
  98. }
  99. }else{
  100. $paidAmount = null;
  101. $startAt = null;
  102. $program = null;
  103. $category = null;
  104. $quantity = null;
  105. }
  106. }elseif ($orderType == "group"){
  107. /** @var SessionOrder $sessionOrder */
  108. $sessionOrder = $sessionOrderRepository->findOneBy(['id'=> $orderId]);
  109. $currency = $sessionOrder->getPaymentCurrency();
  110. if ($sessionOrder){
  111. $paidAmount = $sessionOrder->getAmountPaid();
  112. $startAt = $sessionOrder->getSession()->getStartDate();
  113. $program = $sessionOrder->getSession()->getLevel()->getSubject();
  114. $category = $sessionOrder->getSession()->getLevel()->getSubject()->getCategory();
  115. $quantity = 1;
  116. $isTwoTime = $sessionOrder->getIsTwoTime();
  117. if ($user && $paidAmount > 0) {
  118. $datafastService->recordPayment(
  119. $isTwoTime ? $paidAmount / 2 : $paidAmount,
  120. $currency,
  121. 'group-' . $orderId,
  122. $user->getEmail(),
  123. false
  124. );
  125. }
  126. }else{
  127. $paidAmount = null;
  128. $startAt = null;
  129. $program = null;
  130. $category = null;
  131. $quantity = null;
  132. }
  133. }else{
  134. $paidAmount = null;
  135. $startAt = null;
  136. $program = null;
  137. $category = null;
  138. $quantity = null;
  139. }
  140. return $this->render('profil/thank-you.html.twig', [
  141. 'orderId' => $orderId,
  142. 'paidAmount' => $paidAmount,
  143. 'currency' => $currency,
  144. 'program' => $program,
  145. 'startDate' => $startAt,
  146. 'category' => $category,
  147. 'quantity' => $quantity,
  148. 'orderType' => $orderType,
  149. 'user' => $user,
  150. 'isTwoTime' => $isTwoTime
  151. ]);
  152. }
  153. /**
  154. * @Route("/profil", name="user_profil")
  155. */
  156. public function profil()
  157. {
  158. $currentYear = date('Y');
  159. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  160. ? 'teacher/profil.html.twig'
  161. : 'profil/profil.html.twig';
  162. return $this->render($template, [
  163. 'user' => $this->getUser(),
  164. 'currentYear' => $currentYear
  165. ]);
  166. }
  167. /**
  168. * @Route("/{id}/edit", name="user_profil_edit")
  169. */
  170. public function editProfil(User $user, Request $request, EntityManagerInterface $em)
  171. {
  172. $user = $this->getUser();
  173. $form = $this->createForm(AccountType::class, $user);
  174. $form->handleRequest($request);
  175. if ($form->isSubmitted() && $form->isValid()) {
  176. $em->persist($user);
  177. $em->flush();
  178. $this->addFlash(
  179. 'success',
  180. 'Les données de votre compte ont été mise à jour avec succès !'
  181. );
  182. return $this->redirectToRoute('user_profil');
  183. }
  184. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  185. ? 'teacher/edit-user.html.twig'
  186. : 'profil/edit.html.twig';
  187. return $this->render($template, [
  188. 'form' => $form->createView(),
  189. ]);
  190. }
  191. /**
  192. * @Route("/password", name="user_password_edit")
  193. * @param Request $request
  194. * @param UserPasswordEncoderInterface $passwordEncoder
  195. * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  196. */
  197. public function editPassword(Request $request, UserPasswordEncoderInterface $passwordEncoder, EntityManagerInterface $em)
  198. {
  199. $user = $this->getUser();
  200. $form = $this->createForm(PasswordUserUpdateType::class, $user);
  201. $form->handleRequest($request);
  202. if ($form->isSubmitted() && $form->isValid()) {
  203. $user = $form->getData();
  204. $encodedPassword = $passwordEncoder->encodePassword($user, $user->getPassword());
  205. $user->setPassword($encodedPassword);
  206. $em->persist($user);
  207. $em->flush();
  208. $this->addFlash(
  209. 'success',
  210. 'Votre mot de passe a été mise à jour avec succès !'
  211. );
  212. return $this->redirectToRoute('user_profil');
  213. }
  214. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  215. ? 'teacher/edit-password.html.twig'
  216. : 'profil/password.html.twig';
  217. return $this->render($template, [
  218. 'form' => $form->createView(),
  219. ]);
  220. }
  221. /**
  222. * @Route("/child/add", name="user_profil_add_child")
  223. * @param Request $request
  224. * @param EntityManagerInterface $em
  225. * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  226. */
  227. public function addChild(Request $request, EntityManagerInterface $em)
  228. {
  229. $child = new Child();
  230. $parent = $this->getUser();
  231. $form = $this->createForm(ChildType::class, $child);
  232. $form->handleRequest($request);
  233. if ($form->isSubmitted() && $form->isValid()) {
  234. $age = $child->getAge();
  235. if ($age > 0 and $age < 12)
  236. {
  237. $child->setIsChild(true)
  238. ->setIsTeen(false)
  239. ->setIsAdult(false)
  240. ;
  241. }elseif ($age > 11 and $age < 16)
  242. {
  243. $child->setIsTeen(true)
  244. ->setIsAdult(false)
  245. ->setIsChild(false)
  246. ;
  247. }else{
  248. $child->setIsTeen(false)
  249. ->setIsAdult(true)
  250. ->setIsChild(false)
  251. ;
  252. }
  253. $child->setParent($parent);
  254. $em->persist($child);
  255. $em->flush();
  256. $this->addFlash('success', 'Le membre a bien été ajouté');
  257. return $this->redirectToRoute('user_profil');
  258. }
  259. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  260. ? 'teacher/add-child.html.twig'
  261. : 'profil/add_child.html.twig';
  262. return $this->render($template, [
  263. 'form' => $form->createView(),
  264. ]);
  265. }
  266. /**
  267. * @Route("/child/{id}/edit", name="user_profil_edit_child")
  268. */
  269. public function editChild(Child $child, Request $request, EntityManagerInterface $em)
  270. {
  271. $parent = $this->getUser();
  272. $form = $this->createForm(ChildEditType::class, $child);
  273. $form->handleRequest($request);
  274. if ($form->isSubmitted() && $form->isValid()) {
  275. $age = $child->getAge();
  276. if ($age > 0 and $age < 12)
  277. {
  278. $child->setIsChild(true)
  279. ->setIsTeen(false)
  280. ->setIsAdult(false)
  281. ;
  282. }elseif ($age > 11 and $age < 16)
  283. {
  284. $child->setIsTeen(true)
  285. ->setIsAdult(false)
  286. ->setIsChild(false)
  287. ;
  288. }else{
  289. $child->setIsTeen(false)
  290. ->setIsAdult(true)
  291. ->setIsChild(false)
  292. ;
  293. }
  294. $child->setParent($parent);
  295. $em->persist($child);
  296. $em->flush();
  297. $this->addFlash('success', 'Les informations du membre '. $child->getFirstName().' ont bien été modifiées');
  298. return $this->redirectToRoute('user_profil');
  299. }
  300. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  301. ? 'teacher/edit-child.html.twig'
  302. : 'profil/edit_child.html.twig';
  303. return $this->render($template, [
  304. 'form' => $form->createView(),
  305. 'child' => $child,
  306. ]);
  307. }
  308. /**
  309. * @Route("/thanks/ticket", name="ticket_confirmation")
  310. */
  311. public function ticketConfirmation(TicketOrderRepository $ticketOrderRepository): Response
  312. {
  313. /** @var User $user */
  314. $user = $this->getUser();
  315. $ticketOrder = $ticketOrderRepository->findOneBy(
  316. ['user' => $user],
  317. ['id' => 'DESC']
  318. );
  319. return $this->render('profil/thank-you-ticket.html.twig', [
  320. 'user' => $user,
  321. 'ticketOrder' => $ticketOrder,
  322. ]);
  323. }
  324. /**
  325. * @Route("/thanks/level-test", name="level_test_booking_confirmation")
  326. */
  327. public function levelTestConfirmation(UserPlacementTestRepository $userPlacementTestRepository, PaidCourseListRepository $paidCourseListRepository): Response
  328. {
  329. /** @var User $user */
  330. $user = $this->getUser();
  331. $userPlacementTest = $userPlacementTestRepository->findOneBy(
  332. ['user' => $user, 'isCanceledbyUs' => false],
  333. ['id' => 'DESC']
  334. );
  335. $levelTestCourse = $userPlacementTest
  336. ? $paidCourseListRepository->findOneBy(
  337. ['userTestLevel' => $userPlacementTest],
  338. ['id' => 'DESC']
  339. )
  340. : null;
  341. return $this->render('profil/thank-you-level-test.html.twig', [
  342. 'user' => $user,
  343. 'userPlacementTest' => $userPlacementTest,
  344. 'levelTestCourse' => $levelTestCourse,
  345. ]);
  346. }
  347. /**
  348. * @Route("/courses", name="user_courses")
  349. * @param SubscriptionOrderRepository $subscriptionOrderRepository
  350. * @param SessionOrderRepository $orderRepository
  351. * @param VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository
  352. * @param TicketOrderRepository $ticketOrderRepository
  353. * @return Response
  354. */
  355. public function coursesList(SubscriptionOrderRepository $subscriptionOrderRepository, SessionOrderRepository $orderRepository, VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository, TicketOrderRepository $ticketOrderRepository, UserPlacementTestRepository $userPlacementTestRepository, SessionRegistrationDateRepository $sessionRegistrationDateRepository, DiscountRepository $discountRepository)
  356. {
  357. /** @var User $user */
  358. $user = $this->getUser();
  359. $sessionsRegistrationDate = $sessionRegistrationDateRepository->findAll();
  360. $discounts = $discountRepository->findAll();
  361. $userTickets = $ticketOrderRepository->getValidTicketsForOneUser($user);
  362. $cardError = null;
  363. $activeSubscriptions = $subscriptionOrderRepository->getAllActiveSubscriptionForUser($user);
  364. $dueSubscriptions = $subscriptionOrderRepository->getAllDueSubscriptionForUser($user);
  365. /*rajouter dans la vue, la limite : "now"|date("Y/m/d") < abo.renewBefore|date_modify("+3 day")|date("Y/m/d")
  366. */
  367. $canceledSubscriptionsToResubscribe = $subscriptionOrderRepository->getAllSubscriptionToResubscribeForUser($user);
  368. $videosCourses = $videosCoursesRegistrationRepository->getAllActiveVideoCoursesOrderByUser($user);
  369. $activeGroupCourses = $orderRepository->getAllCurrentOrderSessionForUser($user);
  370. $sessionOrderWithNoFuturSessionOrder = $orderRepository->getAllCurrentOrderSessionForUserWithNoFuturOrderForSameProgram($user);
  371. $userTestsLevel = $userPlacementTestRepository->findBy([
  372. 'user' => $user,
  373. 'isCanceledbyUs' => false
  374. ]);
  375. return $this->render('profil/courses.html.twig', [
  376. 'user' => $user,
  377. 'activeSubscriptions' => $activeSubscriptions,
  378. 'dueSubscriptions' => $dueSubscriptions,
  379. 'toRenewSubscriptions' => $canceledSubscriptionsToResubscribe,
  380. 'activeGroup' => $activeGroupCourses,
  381. 'videosCourses' => $videosCourses,
  382. 'errorCard' => $cardError,
  383. 'stripe_public_key' => $this->getParameter('stripe_public_key'),
  384. 'tickets' => $userTickets,
  385. 'userTestsLevel' => $userTestsLevel,
  386. 'sessionsRegistrationDate' => $sessionsRegistrationDate,
  387. 'discounts' => $discounts,
  388. 'sessionOrderWithNoFuturSessionOrder' => $sessionOrderWithNoFuturSessionOrder
  389. ]);
  390. }
  391. }