<?php
namespace App\Controller;
use App\Entity\Child;
use App\Entity\ChildPreference;
use App\Entity\Guardian;
use App\Entity\Guardian\GuardianPriceDiscount;
use App\Entity\Litexpo;
use App\Form\GuardianAfterSummer\GuardianAfterSummerType;
use App\Form\LitexpoType;
use App\Message\AssignChildPreferenceTeacherMessage;
use App\Message\SendMailMessage;
use App\Repository\ChildPreferenceHistoryRepository;
use App\Repository\ChildPreferenceRepository;
use App\Repository\ChildRepository;
use App\Repository\DisciplineRepository;
use App\Repository\GuardianRepository;
use App\Service\ChildPreferenceService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Routing\Annotation\Route;
class FrontController extends AbstractController
{
/**
* @Route("/service-purchase-rules", name="front_purchase_rules")
* @return Response
*/
public function front_purchase_rules(Request $request)
{
// var_dump($request->headers->all());
// die();
return $this->render('service_purchase_rules.html.twig', []);
}
/**
* @Route("/terms-and-conditions", name="front_terms")
* @return Response
*/
public function termsIndex(Request $request)
{
// var_dump($request->headers->all());
// die();
return $this->render('terms_and_conditions.html.twig', []);
}
/**
* @Route("/privacy-policy", name="front_privacy")
* @return Response
*/
public function privacyIndex(Request $request)
{
return $this->render('privacy_policy.html.twig', []);
}
/**
* @Route("/data-deletion", name="front_deletion")
* @return Response
*/
public function deletionIndex(Request $request)
{
return $this->render('data_delete_policy.html.twig', []);
}
/**
* @Route("/thank-you", name="thankYouReview")
* @return Response
*/
public function thankYouReview(Request $request)
{
return $this->render('thank_you_review.html.twig', []);
}
#[Route('/karjera', name: 'karjera')]
#[Route('/litexpo', name: 'litexpo')]
public function register(Request $request, EntityManagerInterface $entityManager): Response
{
$litexpo = new Litexpo();
$form = $this->createForm(LitexpoType::class, $litexpo);
$form->handleRequest($request);
// dump($form->isSubmitted());
// dump($form->isValid());
// dump($form->getErrors());
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($litexpo);
$entityManager->flush();
return $this->renderForm('litexpo/litexpo.html.twig', [
'form' => $form,
'success' => true,
]);
}
return $this->renderForm('litexpo/litexpo.html.twig', [
'form' => $form,
]);
}
#[Route('/vasara/{referralCode}', name: 'vasra')]
public function vasara(Request $request, EntityManagerInterface $entityManager, GuardianRepository $guardianRepository,ChildPreferenceRepository $childPreferenceRepository, ChildPreferenceService $childPreferenceService, MessageBusInterface $messageBus, $referralCode): Response
{
$guardian = $guardianRepository->findOneBy(['referralCode' => $referralCode]);
if (!$guardian) {
return $this->redirectToRoute('app_login');
}
$date = new \DateTime();
$guardian->setSource($date->format('Y-m-d H:i:s'));
$entityManager->persist($guardian);
$entityManager->flush();
// if($guardian->getSummer() == "YES_35")
// {
// return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
// }
//
// if($guardian->getSummer() == "YES_20")
// {
// return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
// }
if ($request->request->get('approve') || $request->query->get('approve') || $request->request->get('childPref') || $request->query->get('childPref')) {
$childPreferenceId = $request->query->get('childPref');
$guardian->setProgress(1);
$guardian->setSummerAt(new \DateTime());
$entityManager->persist($guardian);
$entityManager->flush();
$childPreference = $childPreferenceRepository->find($childPreferenceId);
$replacements = [
"[CHILD_NAME]"=>$childPreference->getChild()->getFullname(),
"[CHILD_AGREE_DISC]"=>$childPreference->getDiscipline()->getName(),
];
$messageBus->dispatch(new SendMailMessage($guardian->getEmail(), '', '', $replacements, 'CLIENT_OFFER_FROM_TUTOR'));
// if($type == "YES_20")
// {
// $guardianDiscount = new GuardianPriceDiscount();
// $guardianDiscount->setGuardian($guardian);
// $guardianDiscount->setDiscountPercent(20);
// $guardianDiscount->setDateFrom(new \DateTime("2025-07-01 00:00:00"));
// $guardianDiscount->setDateTo(new \DateTime("2025-08-31 23:59:59"));
// $entityManager->persist($guardianDiscount);
// $entityManager->flush();
// $guardian->addGuardianPriceDiscount($guardianDiscount);
// $entityManager->persist($guardian);
// $entityManager->flush();
//
// $childPreferenceService->recalculatePricesForFurtherLessons($guardian,new \DateTime("2025-07-01 00:00:00"));
//
//
// }
return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
}
if ($request->request->get('decline') || $request->query->get('decline')) {
$guardian->setSummerAdditional('X');
$entityManager->persist($guardian);
$entityManager->flush();
return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => true]);
}
return $this->render('me/guardian/summer_sms_accept.html.twig', ['success' => false]);
}
#[Route('/mokslo_metai/{referralCode}', name: 'mokslo_metai')]
public function mokslo_metai(Request $request, EntityManagerInterface $entityManager, GuardianRepository $guardianRepository,ChildPreferenceService $childPreferenceService, MessageBusInterface $messageBus, $referralCode, ChildRepository $childRepository, DisciplineRepository $disciplineRepository, ChildPreferenceHistoryRepository $childPreferenceHistoryRepository): Response
{
return $this->redirectToRoute('guardian_short_register_v2');
$guardian = $guardianRepository->findOneBy(['referralCode' => $referralCode]);
if (!$guardian) {
return $this->redirectToRoute('app_login');
}
/** @var Guardian $guardian */
$guardian->setNewEmailOpened(new \DateTime());
$entityManager->persist($guardian);
$entityManager->flush();
$dateToSendAt = new \DateTime();
foreach ($guardian->getChildren() as $child) {
if($child->getChildPreferences()->count() > 0)
{
return $this->render('me/guardian/after_summer.html.twig', ['success' => true]);
}
}
$requestData = $request->request->all();
if($requestData) {
$requestData = $requestData['guardian_after_summer'];
$guardian->setNewEmailSubmitted(true);
$entityManager->persist($guardian);
$entityManager->flush();
foreach ($requestData['children'] as $requestChild) {
// dump($requestChild);
// die();
$child = $childRepository->findOneBy(['guardian' => $guardian, 'fullname' => $requestChild['fullname']]);
if (!$child) {
$child = new Child();
}
$child->setGuardian($guardian);
$child->setFullname($requestChild['fullname']);
$child->setClass($requestChild['class']);
$entityManager->persist($child);
$entityManager->flush();
if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['tutorGender'])) {
$child->setGender('Nesvarbu');
if ($requestChild['child-details-wrap']['tutorGender'] == 'Korepetitorių (vaikinas)')
$child->setGender('Vaikinas');
if ($requestChild['child-details-wrap']['tutorGender'] == 'Korepetitorę (mergina)')
$child->setGender('Mergina');
}
if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['otherTutorFeatures'])) {
foreach ($requestChild['child-details-wrap']['otherTutorFeatures'] as $otherTutorFeature) {
if ($otherTutorFeature == 'Mokantis vaikus su disleksija') {
$child->setFlagDyslexia(true);
}
if ($otherTutorFeature == 'Mokantis jautresnius vaikus') {
$child->setFlagSensitive(true);
}
if ($otherTutorFeature == 'Mokantis IB (Tarptautinis bakalaureatas)') {
$child->setFlagIB(true);
}
if ($otherTutorFeature == 'Išskirtinai reiklus') {
$child->setFlagStrict(true);
}
}
}
if (isset($requestChild['child-details-wrap']) && isset($requestChild['child-details-wrap']['language'])) {
if ($requestChild['child-details-wrap']['language'] == 'Anglų kalba') {
$child->setFlagENG(true);
}
if ($requestChild['child-details-wrap']['language'] == 'Lenkų kalba') {
$child->setFlagPL(true);
}
if ($requestChild['child-details-wrap']['language'] == 'Rusų kalba') {
$child->setFlagRU(true);
}
}
$entityManager->persist($child);
$entityManager->flush();
if(isset($requestChild['childPreferences'])) {
foreach ($requestChild['childPreferences'] as $preference) {
if (isset($preference['tutorGender'])) {
$child->setGender('Nesvarbu');
if ($preference['tutorGender'] == 'Korepetitorių (vaikinas)')
$child->setGender('Vaikinas');
if ($preference['tutorGender'] == 'Korepetitorę (mergina)')
$child->setGender('Mergina');
}
if (isset($preference['otherTutorFeatures'])) {
foreach ($preference['otherTutorFeatures'] as $otherTutorFeature) {
if ($otherTutorFeature == 'Mokantis vaikus su disleksija') {
$child->setFlagDyslexia(true);
}
if ($otherTutorFeature == 'Mokantis jautresnius vaikus') {
$child->setFlagSensitive(true);
}
if ($otherTutorFeature == 'Mokantis IB (Tarptautinis bakalaureatas)') {
$child->setFlagIB(true);
}
if ($otherTutorFeature == 'Išskirtinai reiklus') {
$child->setFlagStrict(true);
}
}
}
if (isset($preference['language'])) {
if ($preference['language'] == 'Anglų kalba') {
$child->setFlagENG(true);
}
if ($preference['language'] == 'Lenkų kalba') {
$child->setFlagPL(true);
}
if ($preference['language'] == 'Rusų kalba') {
$child->setFlagRU(true);
}
}
$entityManager->persist($child);
$entityManager->flush();
$fittingTimes = "";
foreach ($preference['availableTimes'] as $availableTime) {
$fittingTimes .= "{$this->getWeekdayString($availableTime['dayOfWeek'])}, {$availableTime['startTime']} - {$availableTime['endTime']};" . PHP_EOL;
}
$discipline = $disciplineRepository->find($preference['discipline']);
$childPreference = new ChildPreference();
$childPreference->setChild($child);
$childPreference->setAssignedFrom('Anketa');
$childPreference->setStartTime(new \DateTime($preference['startTime']));
$childPreference->setDiscipline($discipline);
$childPreference->setEmailDuration($preference['frequency'] * 60);
$childPreference->setSingleEmailDuration(60);
$childPreference->setFittingTimes($fittingTimes);
$teacher = null;
if(isset($requestChild['previoustutor']))
{
$childPreference->setKeepPreviousTutor(true);
$newestDeletedChildPreference = $childPreferenceHistoryRepository
->createQueryBuilder('cph')
->andwhere('cph.child = :child')
->setParameter('child', $child)
->andWhere('cph.discipline = :discipline')
->setParameter('discipline', $discipline)
->orderBy('cph.deletedAt', 'DESC')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
if($newestDeletedChildPreference)
{
$teacher = $newestDeletedChildPreference->getTeacher();
$childPreference->setTeacher($teacher);
}
}
$entityManager->persist($childPreference);
$entityManager->flush();
$child->addChildPreference($childPreference);
$child->setFittingTimes($fittingTimes);
$entityManager->persist($child);
$entityManager->flush();
if($guardian->getId() != 8363) {
// $childPreferenceService->assignTeacher($childPreference, $child, $teacher);
$messageBus->dispatch(new Envelope(new AssignChildPreferenceTeacherMessage($childPreference->getId()), [
DelayStamp::delayUntil($dateToSendAt),
]));
$dateToSendAt->modify('+1 minute');
}
}
}
}
$entityManager->flush();
return $this->render('me/guardian/after_summer.html.twig', ['success' => true]);
}
foreach ($guardian->getChildren() as $child) {
if($child->getLessonsEnd())
{
$guardian->removeChild($child);
}
if($child->getClass() > 12)
{
$guardian->removeChild($child);
}
}
$form = $this->createForm(GuardianAfterSummerType::class, $guardian);
return $this->renderForm('me/guardian/after_summer.html.twig', ['form' => $form, 'success' => false]);
}
public function getWeekdayString($day)
{
if ($day == 1) {
return 'Pirmadienis';
}
if ($day == 2) {
return 'Antradienis';
}
if ($day == 3) {
return 'Trečiadienis';
}
if ($day == 4) {
return 'Ketvirtadienis';
}
if ($day == 5) {
return 'Penktadienis';
}
if ($day == 6) {
return 'Šeštadienis';
}
if ($day == 7) {
return 'Sekmadienis';
} else {
return "";
}
}
}