src/Controller/FrontController.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Child;
  4. use App\Entity\ChildPreference;
  5. use App\Entity\Guardian;
  6. use App\Entity\Guardian\GuardianPriceDiscount;
  7. use App\Entity\Litexpo;
  8. use App\Form\GuardianAfterSummer\GuardianAfterSummerType;
  9. use App\Form\LitexpoType;
  10. use App\Message\AssignChildPreferenceTeacherMessage;
  11. use App\Message\SendMailMessage;
  12. use App\Repository\ChildPreferenceHistoryRepository;
  13. use App\Repository\ChildPreferenceRepository;
  14. use App\Repository\ChildRepository;
  15. use App\Repository\DisciplineRepository;
  16. use App\Repository\GuardianRepository;
  17. use App\Service\ChildPreferenceService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Messenger\Envelope;
  23. use Symfony\Component\Messenger\MessageBusInterface;
  24. use Symfony\Component\Messenger\Stamp\DelayStamp;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. class FrontController extends AbstractController
  27. {
  28. /**
  29. * @Route("/service-purchase-rules", name="front_purchase_rules")
  30. * @return Response
  31. */
  32. public function front_purchase_rules(Request $request)
  33. {
  34. // var_dump($request->headers->all());
  35. // die();
  36. return $this->render('service_purchase_rules.html.twig', []);
  37. }
  38. /**
  39. * @Route("/terms-and-conditions", name="front_terms")
  40. * @return Response
  41. */
  42. public function termsIndex(Request $request)
  43. {
  44. // var_dump($request->headers->all());
  45. // die();
  46. return $this->render('terms_and_conditions.html.twig', []);
  47. }
  48. /**
  49. * @Route("/privacy-policy", name="front_privacy")
  50. * @return Response
  51. */
  52. public function privacyIndex(Request $request)
  53. {
  54. return $this->render('privacy_policy.html.twig', []);
  55. }
  56. /**
  57. * @Route("/data-deletion", name="front_deletion")
  58. * @return Response
  59. */
  60. public function deletionIndex(Request $request)
  61. {
  62. return $this->render('data_delete_policy.html.twig', []);
  63. }
  64. /**
  65. * @Route("/thank-you", name="thankYouReview")
  66. * @return Response
  67. */
  68. public function thankYouReview(Request $request)
  69. {
  70. return $this->render('thank_you_review.html.twig', []);
  71. }
  72. #[Route('/karjera', name: 'karjera')]
  73. #[Route('/litexpo', name: 'litexpo')]
  74. public function register(Request $request, EntityManagerInterface $entityManager): Response
  75. {
  76. $litexpo = new Litexpo();
  77. $form = $this->createForm(LitexpoType::class, $litexpo);
  78. $form->handleRequest($request);
  79. // dump($form->isSubmitted());
  80. // dump($form->isValid());
  81. // dump($form->getErrors());
  82. if ($form->isSubmitted() && $form->isValid()) {
  83. $entityManager->persist($litexpo);
  84. $entityManager->flush();
  85. return $this->renderForm('litexpo/litexpo.html.twig', [
  86. 'form' => $form,
  87. 'success' => true,
  88. ]);
  89. }
  90. return $this->renderForm('litexpo/litexpo.html.twig', [
  91. 'form' => $form,
  92. ]);
  93. }
  94. #[Route('/vasara/{referralCode}', name: 'vasra')]
  95. public function vasara(Request $request, EntityManagerInterface $entityManager, GuardianRepository $guardianRepository,ChildPreferenceRepository $childPreferenceRepository, ChildPreferenceService $childPreferenceService, MessageBusInterface $messageBus, $referralCode): Response
  96. {
  97. $guardian = $guardianRepository->findOneBy(['referralCode' => $referralCode]);
  98. if (!$guardian) {
  99. return $this->redirectToRoute('app_login');
  100. }
  101. $date = new \DateTime();
  102. $guardian->setSource($date->format('Y-m-d H:i:s'));
  103. $entityManager->persist($guardian);
  104. $entityManager->flush();
  105. // if($guardian->getSummer() == "YES_35")
  106. // {
  107. // return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
  108. // }
  109. //
  110. // if($guardian->getSummer() == "YES_20")
  111. // {
  112. // return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
  113. // }
  114. if ($request->request->get('approve') || $request->query->get('approve') || $request->request->get('childPref') || $request->query->get('childPref')) {
  115. $childPreferenceId = $request->query->get('childPref');
  116. $guardian->setProgress(1);
  117. $guardian->setSummerAt(new \DateTime());
  118. $entityManager->persist($guardian);
  119. $entityManager->flush();
  120. $childPreference = $childPreferenceRepository->find($childPreferenceId);
  121. $replacements = [
  122. "[CHILD_NAME]"=>$childPreference->getChild()->getFullname(),
  123. "[CHILD_AGREE_DISC]"=>$childPreference->getDiscipline()->getName(),
  124. ];
  125. $messageBus->dispatch(new SendMailMessage($guardian->getEmail(), '', '', $replacements, 'CLIENT_OFFER_FROM_TUTOR'));
  126. // if($type == "YES_20")
  127. // {
  128. // $guardianDiscount = new GuardianPriceDiscount();
  129. // $guardianDiscount->setGuardian($guardian);
  130. // $guardianDiscount->setDiscountPercent(20);
  131. // $guardianDiscount->setDateFrom(new \DateTime("2025-07-01 00:00:00"));
  132. // $guardianDiscount->setDateTo(new \DateTime("2025-08-31 23:59:59"));
  133. // $entityManager->persist($guardianDiscount);
  134. // $entityManager->flush();
  135. // $guardian->addGuardianPriceDiscount($guardianDiscount);
  136. // $entityManager->persist($guardian);
  137. // $entityManager->flush();
  138. //
  139. // $childPreferenceService->recalculatePricesForFurtherLessons($guardian,new \DateTime("2025-07-01 00:00:00"));
  140. //
  141. //
  142. // }
  143. return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
  144. }
  145. if ($request->request->get('decline') || $request->query->get('decline')) {
  146. $guardian->setSummerAdditional('X');
  147. $entityManager->persist($guardian);
  148. $entityManager->flush();
  149. return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
  150. }
  151. return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => false]);
  152. }
  153. #[Route('/mokslo_metai/{referralCode}', name: 'mokslo_metai')]
  154. public function mokslo_metai(Request $request, EntityManagerInterface $entityManager, GuardianRepository $guardianRepository,ChildPreferenceService $childPreferenceService, MessageBusInterface $messageBus, $referralCode, ChildRepository $childRepository, DisciplineRepository $disciplineRepository, ChildPreferenceHistoryRepository $childPreferenceHistoryRepository): Response
  155. {
  156. return $this->redirectToRoute('guardian_short_register_v2');
  157. $guardian = $guardianRepository->findOneBy(['referralCode' => $referralCode]);
  158. if (!$guardian) {
  159. return $this->redirectToRoute('app_login');
  160. }
  161. /** @var Guardian $guardian */
  162. $guardian->setNewEmailOpened(new \DateTime());
  163. $entityManager->persist($guardian);
  164. $entityManager->flush();
  165. $dateToSendAt = new \DateTime();
  166. foreach ($guardian->getChildren() as $child) {
  167. if($child->getChildPreferences()->count() > 0)
  168. {
  169. return $this->render('me/guardian/after_summer.html.twig', ['success' => true]);
  170. }
  171. }
  172. $requestData = $request->request->all();
  173. if($requestData) {
  174. $requestData = $requestData['guardian_after_summer'];
  175. $guardian->setNewEmailSubmitted(true);
  176. $entityManager->persist($guardian);
  177. $entityManager->flush();
  178. foreach ($requestData['children'] as $requestChild) {
  179. // dump($requestChild);
  180. // die();
  181. $child = $childRepository->findOneBy(['guardian' => $guardian, 'fullname' => $requestChild['fullname']]);
  182. if (!$child) {
  183. $child = new Child();
  184. }
  185. $child->setGuardian($guardian);
  186. $child->setFullname($requestChild['fullname']);
  187. $child->setClass($requestChild['class']);
  188. $entityManager->persist($child);
  189. $entityManager->flush();
  190. if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['tutorGender'])) {
  191. $child->setGender('Nesvarbu');
  192. if ($requestChild['child-details-wrap']['tutorGender'] == 'Korepetitorių (vaikinas)')
  193. $child->setGender('Vaikinas');
  194. if ($requestChild['child-details-wrap']['tutorGender'] == 'Korepetitorę (mergina)')
  195. $child->setGender('Mergina');
  196. }
  197. if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['otherTutorFeatures'])) {
  198. foreach ($requestChild['child-details-wrap']['otherTutorFeatures'] as $otherTutorFeature) {
  199. if ($otherTutorFeature == 'Mokantis vaikus su disleksija') {
  200. $child->setFlagDyslexia(true);
  201. }
  202. if ($otherTutorFeature == 'Mokantis jautresnius vaikus') {
  203. $child->setFlagSensitive(true);
  204. }
  205. if ($otherTutorFeature == 'Mokantis IB (Tarptautinis bakalaureatas)') {
  206. $child->setFlagIB(true);
  207. }
  208. if ($otherTutorFeature == 'Išskirtinai reiklus') {
  209. $child->setFlagStrict(true);
  210. }
  211. }
  212. }
  213. if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['language'])) {
  214. if ($requestChild['child-details-wrap']['language'] == 'Anglų kalba') {
  215. $child->setFlagENG(true);
  216. }
  217. if ($requestChild['child-details-wrap']['language'] == 'Lenkų kalba') {
  218. $child->setFlagPL(true);
  219. }
  220. if ($requestChild['child-details-wrap']['language'] == 'Rusų kalba') {
  221. $child->setFlagRU(true);
  222. }
  223. }
  224. $entityManager->persist($child);
  225. $entityManager->flush();
  226. if(isset($requestChild['childPreferences'])) {
  227. foreach ($requestChild['childPreferences'] as $preference) {
  228. if (isset($preference['tutorGender'])) {
  229. $child->setGender('Nesvarbu');
  230. if ($preference['tutorGender'] == 'Korepetitorių (vaikinas)')
  231. $child->setGender('Vaikinas');
  232. if ($preference['tutorGender'] == 'Korepetitorę (mergina)')
  233. $child->setGender('Mergina');
  234. }
  235. if (isset($preference['otherTutorFeatures'])) {
  236. foreach ($preference['otherTutorFeatures'] as $otherTutorFeature) {
  237. if ($otherTutorFeature == 'Mokantis vaikus su disleksija') {
  238. $child->setFlagDyslexia(true);
  239. }
  240. if ($otherTutorFeature == 'Mokantis jautresnius vaikus') {
  241. $child->setFlagSensitive(true);
  242. }
  243. if ($otherTutorFeature == 'Mokantis IB (Tarptautinis bakalaureatas)') {
  244. $child->setFlagIB(true);
  245. }
  246. if ($otherTutorFeature == 'Išskirtinai reiklus') {
  247. $child->setFlagStrict(true);
  248. }
  249. }
  250. }
  251. if (isset($preference['language'])) {
  252. if ($preference['language'] == 'Anglų kalba') {
  253. $child->setFlagENG(true);
  254. }
  255. if ($preference['language'] == 'Lenkų kalba') {
  256. $child->setFlagPL(true);
  257. }
  258. if ($preference['language'] == 'Rusų kalba') {
  259. $child->setFlagRU(true);
  260. }
  261. }
  262. $entityManager->persist($child);
  263. $entityManager->flush();
  264. $fittingTimes = "";
  265. foreach ($preference['availableTimes'] as $availableTime) {
  266. $fittingTimes .= "{$this->getWeekdayString($availableTime['dayOfWeek'])}, {$availableTime['startTime']} - {$availableTime['endTime']};" . PHP_EOL;
  267. }
  268. $discipline = $disciplineRepository->find($preference['discipline']);
  269. $childPreference = new ChildPreference();
  270. $childPreference->setChild($child);
  271. $childPreference->setAssignedFrom('Anketa');
  272. $childPreference->setStartTime(new \DateTime($preference['startTime']));
  273. $childPreference->setDiscipline($discipline);
  274. $childPreference->setEmailDuration($preference['frequency'] * 60);
  275. $childPreference->setSingleEmailDuration(60);
  276. $childPreference->setFittingTimes($fittingTimes);
  277. $teacher = null;
  278. if(isset($requestChild['previoustutor']))
  279. {
  280. $childPreference->setKeepPreviousTutor(true);
  281. $newestDeletedChildPreference = $childPreferenceHistoryRepository
  282. ->createQueryBuilder('cph')
  283. ->andwhere('cph.child = :child')
  284. ->setParameter('child', $child)
  285. ->andWhere('cph.discipline = :discipline')
  286. ->setParameter('discipline', $discipline)
  287. ->orderBy('cph.deletedAt', 'DESC')
  288. ->setMaxResults(1)
  289. ->getQuery()
  290. ->getOneOrNullResult();
  291. if($newestDeletedChildPreference)
  292. {
  293. $teacher = $newestDeletedChildPreference->getTeacher();
  294. $childPreference->setTeacher($teacher);
  295. }
  296. }
  297. $entityManager->persist($childPreference);
  298. $entityManager->flush();
  299. $child->addChildPreference($childPreference);
  300. $child->setFittingTimes($fittingTimes);
  301. $entityManager->persist($child);
  302. $entityManager->flush();
  303. if($guardian->getId() != 8363) {
  304. // $childPreferenceService->assignTeacher($childPreference, $child, $teacher);
  305. $messageBus->dispatch(new Envelope(new AssignChildPreferenceTeacherMessage($childPreference->getId()), [
  306. DelayStamp::delayUntil($dateToSendAt),
  307. ]));
  308. $dateToSendAt->modify('+1 minute');
  309. }
  310. }
  311. }
  312. }
  313. $entityManager->flush();
  314. return $this->render('me/guardian/after_summer.html.twig', ['success' => true]);
  315. }
  316. foreach ($guardian->getChildren() as $child) {
  317. if($child->getLessonsEnd())
  318. {
  319. $guardian->removeChild($child);
  320. }
  321. if($child->getClass() > 12)
  322. {
  323. $guardian->removeChild($child);
  324. }
  325. }
  326. $form = $this->createForm(GuardianAfterSummerType::class, $guardian);
  327. return $this->renderForm('me/guardian/after_summer.html.twig', ['form' => $form, 'success' => false]);
  328. }
  329. public function getWeekdayString($day)
  330. {
  331. if ($day == 1) {
  332. return 'Pirmadienis';
  333. }
  334. if ($day == 2) {
  335. return 'Antradienis';
  336. }
  337. if ($day == 3) {
  338. return 'Trečiadienis';
  339. }
  340. if ($day == 4) {
  341. return 'Ketvirtadienis';
  342. }
  343. if ($day == 5) {
  344. return 'Penktadienis';
  345. }
  346. if ($day == 6) {
  347. return 'Šeštadienis';
  348. }
  349. if ($day == 7) {
  350. return 'Sekmadienis';
  351. } else {
  352. return "";
  353. }
  354. }
  355. }