src/Controller/Website/ContactLayoutController.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Website;
  4. use App\Client\ErpClient;
  5. use App\Form\Website\Type\Contact\ContactLayoutType;
  6. use Croisiland\CommonBundle\Model\CivilityEnum;
  7. use Croisiland\CommonBundle\Model\ProspectRequestModel;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\Form\FormError;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class ContactLayoutController extends AbstractController
  14. {
  15. protected ErpClient $erpClient;
  16. public function __construct(ErpClient $erpClient)
  17. {
  18. $this->erpClient = $erpClient;
  19. }
  20. #[Route('/contact-layout-request', name: 'website_contact_layout_request', methods: ['POST'])]
  21. public function submitAction(Request $request): Response
  22. {
  23. $form = $this->createForm(ContactLayoutType::class);
  24. $form->handleRequest($request);
  25. $success = false;
  26. if ($form->isSubmitted() && $form->isValid()) {
  27. $data = $form->getData();
  28. $prospectRequestModel = (new ProspectRequestModel())
  29. ->setCivility($data['civility'] === "M." ? CivilityEnum::MR : CivilityEnum::MRS)
  30. ->setFirstName($data['firstName'])
  31. ->setLastName($data['lastName'])
  32. ->setMessage($data['message'])
  33. ->setEmail($data['email'])
  34. ->setPhoneNumber($data['phone'])
  35. ->setCallbackDate($data['wantsCallback'] ? $data['callbackDateTime'] : null)
  36. ->setCallbackTime($data['wantsCallback'] ? $data['callbackDateTime'] : null)
  37. ;
  38. $success = true;
  39. try {
  40. switch ($data['subject']) {
  41. case 'reservation_info': $this->erpClient->createQuoteRequest($prospectRequestModel); break;
  42. case 'existing_reservation': $this->erpClient->createAdvRequest($prospectRequestModel); break;
  43. case 'group_travel': $this->erpClient->createTravelRequest($prospectRequestModel); break;
  44. default: $this->erpClient->createContactRequest($prospectRequestModel); break;
  45. }
  46. }
  47. catch (\Exception $exception) {
  48. if ($exception->getCode() === Response::HTTP_NOT_ACCEPTABLE) {
  49. $form->addError(new FormError($exception->getMessage()));
  50. }
  51. else {
  52. $form->addError(new FormError("Une erreur est survenue lors du traitement de votre demande. Merci de réessayer plus tard."));
  53. }
  54. $success = false;
  55. }
  56. }
  57. return $this->render('pages/_includes/partials/_popup_recall_form_fragment.html.twig', [
  58. 'contactRequestForm' => $form->createView(),
  59. 'success' => $success,
  60. ]);
  61. }
  62. }