src/Controller/ContractOrderController.php line 238
<?phpnamespace App\Controller;use App\Entity\Accommodation;use App\Entity\Client;use App\Entity\ContractOrder;use App\Entity\Destination;use App\Entity\Term;use App\Entity\TermPrice;use App\Form\ClientLoginType;use App\Form\ContractClientType;use App\Form\ContractOrderType;use App\Repository\AccommodationRepository;use App\Repository\ClientRepository;use App\Repository\ContractOrderRepository;use App\Repository\DestinationRepository;use App\Repository\TermPriceRepository;use App\Repository\TermRepository;use App\Service\ContractOrderService;use App\Service\ContractService;use App\Service\TermService;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Form\Form;use Symfony\Component\Form\FormError;use Symfony\Component\Form\FormInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\Session\SessionBagInterface;use Symfony\Component\HttpFoundation\Session\SessionInterface;use Symfony\Component\Routing\Annotation\Route;class ContractOrderController extends AbstractController{public function __construct(private ClientRepository $clientRepository,private DestinationRepository $destinationRepository,private TermRepository $termRepository,private AccommodationRepository $accommodationRepository,private ContractOrderRepository $contractOrderRepository,private RequestStack $requestStack,private TermPriceRepository $termPriceRepository,){}#[Route('/open/{code}', name: 'app_form_open')]public function openCode(string $code, ContractService $contractService, TermService $termService, Request $request): Response{$destination = $this->destinationRepository->findOneBy(['codeForOpen'=>$request->get('code')]);if($destination instanceof Destination){$contractOrder = $this->getContractOrder();$contractOrder->setDestination($destination);$this->contractOrderRepository->save($contractOrder, true);$this->requestStack->getSession()->set('openDestinationId', $destination->getId());return $this->redirectToRoute('app_form_2');} else {return $this->redirectToRoute('app_form');}}#[Route('/form/1', name: 'app_form')]public function step1(ContractService $contractService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();return $this->render('Pages/Form/step1.html.twig', ['terms' => $termService->getTermsForForm(),'destinations' => $this->destinationRepository->findBy([], ['sortOrder' => 'ASC', 'id' => 'ASC']),'termsList' => [],'controller_name' => 'FormController','contractOrder' => $contractOrder,]);}#[Route('/form/2', name: 'app_form_2')]public function step2(ContractService $contractService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();return $this->render('Pages/Form/step2.html.twig', ['terms' => $termService->getTermsForForm(),'destinations' => $this->destinationRepository->findBy([], ['sortOrder' => 'ASC', 'id' => 'ASC']),'termsList' => $this->termRepository->findActiveTermsForDestinatoin($contractOrder->getDestination()),'controller_name' => 'FormController','contractOrder' => $contractOrder,]);}#[Route('/form3', name: 'app_form_3')]public function step3(ContractService $contractService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();$form = $this->createForm(ContractOrderType::class, $contractOrder, ['action' => $this->generateUrl('app_form_3'),'method' => 'POST',]);$loginForm = $this->createForm(ClientLoginType::class, null, ['action' => $this->generateUrl('app_form_3'),'method' => 'POST',]);$loginForm->handleRequest($request);if ($loginForm->isSubmitted() && $loginForm->isValid()) {$client = $this->clientRepository->findOneBy(['phone' => $loginForm->get('phone')->getData(), 'email' => $loginForm->get('email')->getData()]);if ($client instanceof Client) {$contractOrder->setClient($client);$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_3');}}$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$this->clientRepository->save($contractOrder->getClient());$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_4');}return $this->render('Pages/Form/step3.html.twig', ['terms' => $termService->getTermsForForm(),'destinations' => $this->destinationRepository->findBy([], ['sortOrder' => 'ASC', 'id' => 'ASC']),'termsList' => [],'controller_name' => 'FormController','contractOrder' => $contractOrder,'form' => $form->createView(),'loginForm' => $loginForm->createView(),]);}#[Route('/form4', name: 'app_form_4')]public function step4(ContractService $contractService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();$form = $this->createForm(ContractClientType::class, $contractOrder, ['action' => $this->generateUrl('app_form_4'),'method' => 'POST',]);$form->handleRequest($request);$errors = [];if ($form->isSubmitted() && $form->isValid()) {/** @var ContractOrder $data */$data = $form->getData();$errors = [];if ($this->validateContractClients($data, $errors)) {if (empty($data->getContractClient1()->getLastname())) {$data->setContractClient1(null);} else {$this->clientRepository->save($data->getContractClient1());}if (empty($data->getContractClient2()->getLastname())) {$data->setContractClient2(null);} else {$this->clientRepository->save($data->getContractClient2());}if (empty($data->getContractClient3()->getLastname())) {$data->setContractClient3(null);} else {$this->clientRepository->save($data->getContractClient3());}if (empty($data->getContractClient4()->getLastname())) {$data->setContractClient4(null);} else {$this->clientRepository->save($data->getContractClient4());}if (empty($data->getContractClient5()->getLastname())) {$data->setContractClient5(null);} else {$this->clientRepository->save($data->getContractClient5());}if (empty($data->getContractClient6()->getLastname())) {$data->setContractClient6(null);} else {$this->clientRepository->save($data->getContractClient6());}$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_5');}}return $this->render('Pages/Form/step4.html.twig', ['contractOrder' => $contractOrder,'form' => $form->createView(),'errors' => $errors,]);}#[Route('/form/5', name: 'app_form_5')]public function step5(ContractService $contractService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();return $this->render('Pages/Form/step5.html.twig', ['contractOrder' => $contractOrder,]);}#[Route('/form/finish', name: 'app_form_finish')]public function finish(ContractOrderService $contractOrderService, TermService $termService, Request $request): Response{$contractOrder = $this->getContractOrder();if ($contractOrderService->saveContractOrder($contractOrder)) {$this->requestStack->getSession()->remove('contractOrderId');return $this->redirectToRoute('app_form_done');}die("Něco se pokazilo");}#[Route('/form/dekujeme', name: 'app_form_done')]public function done(ContractService $contractService, TermService $termService, Request $request): Response{return $this->render('Pages/Form/done.html.twig', []);}private function getContractOrder(): ContractOrder{$contractOrder = $this->contractOrderRepository->findOneBy(['id' => $this->requestStack->getSession()->get('contractOrderId', 0)]);if (!$contractOrder instanceof ContractOrder) {$contractOrder = new ContractOrder();$this->contractOrderRepository->save($contractOrder, true);}$this->requestStack->getSession()->set('contractOrderId', $contractOrder->getId());return $contractOrder;}#[Route('/form_select_destination/{id}', name: 'form_select_destination')]public function selectDestination(int $id, Request $request): Response{$contractOrder = $this->getContractOrder();$destination = $this->destinationRepository->find($id);$contractOrder->setDestination($destination);$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_2');}#[Route('/form_select_term_price/{id}', name: 'form_select_term_price')]public function selectTermPrice(int $id, Request $request): Response{/** @var TermPrice $termPrice */$termPrice = $this->termPriceRepository->find($id);$contractOrder = $this->getContractOrder();$contractOrder->setDestination($termPrice->getAccommodation()->getDestination());$contractOrder->setTerm($termPrice->getTerm());$contractOrder->setAccommodation($termPrice->getAccommodation());$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_3');}#[Route('/form_select_term/{id}', name: 'form_select_term')]public function selectTerm(int $id, Request $request): Response{/** @var Term $term */$term = $this->termRepository->find($id);$contractOrder = $this->getContractOrder();$contractOrder->setDestination($term->getDestination());$contractOrder->setTerm($term);$contractOrder->setAccommodation(null);$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_3');}#[Route('/form_select_term_accommodation/{termId}/{id}', name: 'form_select_term_accommodation')]public function selectTermAccommodation(int $termId, int $id, Request $request): Response{/** @var Term $term */$term = $this->termRepository->find($termId);/** @var Accommodation $accommodation */$accommodation = $this->accommodationRepository->find($id);if (!$accommodation || !$accommodation->getIsActive()) {throw $this->createNotFoundException('Ubytování není dostupné.');}$contractOrder = $this->getContractOrder();$contractOrder->setDestination($term->getDestination());$contractOrder->setTerm($term);$contractOrder->setAccommodation($accommodation);$this->contractOrderRepository->save($contractOrder, true);return $this->redirectToRoute('app_form_3');}private function validateContractClients(ContractOrder $data, array &$errors){$isPag = $data->getDestination()->getId() == 1;$client1 = $data->getContractClient1();if($client1->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[1]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if($client1->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[1]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}if (!empty($client1->getLastname()) || !empty($client1->getFirstname()) || !empty($client1->getBirthDate())) {if (empty($client1->getLastname())) {$errors[1]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client1->getFirstname())) {$errors[1]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client1->getBirthDate())) {$errors[1]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client1->getNationality()) && !$isPag) {$errors[1]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client1->getBirthPlace()) && $isPag) {$errors[1]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}$client2 = $data->getContractClient2();if($client2->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[2]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if($client2->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[2]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}if (!empty($client2->getLastname()) || !empty($client2->getFirstname()) || !empty($client2->getBirthDate())) {if (empty($client2->getLastname())) {$errors[2]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client2->getFirstname())) {$errors[2]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client2->getBirthDate())) {$errors[2]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client2->getNationality()) && !$isPag) {$errors[2]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client2->getBirthPlace()) && $isPag) {$errors[2]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}$client3 = $data->getContractClient3();if($client3->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[3]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if($client3->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[3]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}if (!empty($client3->getLastname()) || !empty($client3->getFirstname()) || !empty($client3->getBirthDate())) {if (empty($client3->getLastname())) {$errors[3]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client3->getFirstname())) {$errors[3]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client3->getBirthDate())) {$errors[3]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client3->getNationality()) && !$isPag) {$errors[3]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client2->getBirthPlace()) && $isPag) {$errors[3]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}$client4 = $data->getContractClient4();if($client4->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[4]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if($client4->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[4]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}if (!empty($client4->getLastname()) || !empty($client4->getFirstname()) || !empty($client4->getBirthDate())) {if (empty($client4->getLastname())) {$errors[4]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client4->getFirstname())) {$errors[4]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client4->getBirthDate())) {$errors[4]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client4->getNationality()) && !$isPag) {$errors[4]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client2->getBirthPlace()) && $isPag) {$errors[4]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}$client5 = $data->getContractClient5();if($client5->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[5]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if($client5->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[5]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}if (!empty($client5->getLastname()) || !empty($client5->getFirstname()) || !empty($client5->getBirthDate())) {if (empty($client5->getLastname())) {$errors[5]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client5->getFirstname())) {$errors[5]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client5->getBirthDate())) {$errors[5]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client5->getNationality()) && !$isPag) {$errors[5]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client2->getBirthPlace()) && $isPag) {$errors[5]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}$client6 = $data->getContractClient6();if($client6->getIdNumber()==$data->getClient()->getIdNumber()) {$errors[6]['idNumber'] = 'Číslo dokladu musí být odlišné od hlavního cestujícího';}if (!empty($client6->getLastname()) || !empty($client6->getFirstname()) || !empty($client6->getBirthDate())) {if (empty($client6->getLastname())) {$errors[6]['lastname'] = 'Příjmení spolucestujícího je povinné';}if (empty($client6->getFirstname())) {$errors[6]['firstname'] = 'Jméno spolucestujícího je povinné';}if (empty($client6->getBirthDate())) {$errors[6]['birthDate'] = 'Datum narození spolucestujícího je povinné';}if (empty($client6->getNationality()) && !$isPag) {$errors[6]['nationality'] = 'Občanství spolucestujícího je povinné';}if (empty($client2->getBirthPlace()) && $isPag) {$errors[6]['birthPlace'] = 'Místo narození spolucestujícího je povinné';}}if($client6->getBirthDate()?->format('Y-m-d')==$data->getClient()->getBirthDate()?->format('Y-m-d')) {$errors[6]['birthDate'] = 'Hlavní host a spolucestující nemohou mít stejné datum narození';}return empty($errors);}}