<?php
namespace App\Controller\Uniqskills;
use App\Entity\Gos\Cart;
use App\Entity\Gos\Country;
use App\Entity\Gos\ProductVariant;
use App\Entity\Gos\Uniqskills\Course;
use App\Entity\Gos\Uniqskills\OrderError;
use App\Entity\Gos\User;
use App\Form\Frontend\Uniqskills\OrderErrorType;
use App\Form\Frontend\Uniqskills\OrderErrorWithUserType;
use App\Utils\Uniqskills\OrderErrorUtils;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/{_locale}")
*/
class OrderErrorController extends AbstractController
{
private EntityManagerInterface $em;
private OrderErrorUtils $orderErrorUtils;
public function __construct(EntityManagerInterface $_em, OrderErrorUtils $_orderErrorUtils)
{
$this->em = $_em;
$this->orderErrorUtils = $_orderErrorUtils;
}
/**
* @Route("/order/country-not-found/thank", name="fmUniqskillsOrderErrorThankYouMessage")
*/
public function orderErrorThankYouMessageAction(): Response
{
return $this->render('uniqskills/orderError/orderErrorThankYouMessage.html.twig');
}
/**
* @Route("/order/country-not-found/check/{slugCourse}/{countryCode}", name="fmUniqskillsOrderErrorCheck")
*/
public function orderErrorCheckAction($slugCourse, $countryCode): JsonResponse
{
$course = $this->em->getRepository(Course::class)->findOneBySlug($slugCourse);
$productVariants = $this->em->getRepository(ProductVariant::class)
->findAllByCourseAndCountryCode($course->getSlug(), $countryCode);
if (empty($productVariants))
{
return $this->json(['code' => 200, 'status' => 'EMPTY']);
}
return $this->json(['code' => 200, 'status' => 'OK']);
}
/**
* @Route("/order/country-not-found/{slugCourse}/{country}", name="fmUniqskillsOrderError")
*/
public function orderErrorAction(Request $request, $slugCourse, $country = null)
{
$user = $this->getUser();
$course = $this->em->getRepository(Course::class)->findOneBySlug($slugCourse);
$idMessage = $request->request->get('idMessage');
$orderError = $idMessage
? $this->em->getRepository(OrderError::class)->find($idMessage)
: (new OrderError())
->setUser($this->getUser())
->setCourse($course)
->setMessageTitle('Brak odpowiedniej subskrypcji');
$form = $this->createOrderErrorForm($request, $user, $orderError);
if ($form->isSubmitted() && $form->isValid())
{
$this->em->persist($orderError);
$this->em->flush();
$this->orderErrorUtils->sendOrderErrorMail($course, $orderError, $country);
return $this->redirectToRoute('fmUniqskillsOrderErrorThankYouMessage');
}
$this->em->persist($orderError);
$this->em->flush();
if ($user)
{
if ($country)
{
$countryEntity = $this->em->getRepository(Country::class)->findOneBySlug($country);
$country = $countryEntity ? $countryEntity->getName() : $country;
}
elseif ($user->getCountry())
{
$country = $user->getCountry()->getName();
}
$country = $country === 'Poland' && $request->getSession()->get('userLocale', 'pl') === 'pl' ? 'Polska' : $country;
}
$parameters = [
'course' => $course,
'form' => $form->createView(),
'idMessage' => $orderError->getId(),
'countries' => $this->em->getRepository(Country::class)->findBy([], ['name' => 'ASC']),
'country' => $country
];
if ($form->getName() === 'order_error_with_user')
{
return $this->render('uniqskills/orderError/orderErrorUser.html.twig', $parameters);
}
return $this->render('uniqskills/orderError/orderError.html.twig', $parameters);
}
private function createOrderErrorForm(Request $request, ?User $user, ?OrderError $ordersError): FormInterface
{
if ($user !== null)
{
return $this->createForm(OrderErrorWithUserType::class, $ordersError)->handleRequest($request);
}
return $this->createForm(OrderErrorType::class, $ordersError)->handleRequest($request);
}
}