<?php
declare(strict_types=1);
namespace App\Controller\Website;
use App\Client\ErpClient;
use App\Form\Website\Type\Contact\ContactLayoutType;
use Croisiland\CommonBundle\Model\CivilityEnum;
use Croisiland\CommonBundle\Model\ProspectRequestModel;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ContactLayoutController extends AbstractController
{
protected ErpClient $erpClient;
public function __construct(ErpClient $erpClient)
{
$this->erpClient = $erpClient;
}
#[Route('/contact-layout-request', name: 'website_contact_layout_request', methods: ['POST'])]
public function submitAction(Request $request): Response
{
$form = $this->createForm(ContactLayoutType::class);
$form->handleRequest($request);
$success = false;
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$prospectRequestModel = (new ProspectRequestModel())
->setCivility($data['civility'] === "M." ? CivilityEnum::MR : CivilityEnum::MRS)
->setFirstName($data['firstName'])
->setLastName($data['lastName'])
->setMessage($data['message'])
->setEmail($data['email'])
->setPhoneNumber($data['phone'])
->setCallbackDate($data['wantsCallback'] ? $data['callbackDateTime'] : null)
->setCallbackTime($data['wantsCallback'] ? $data['callbackDateTime'] : null)
;
$success = true;
try {
switch ($data['subject']) {
case 'reservation_info': $this->erpClient->createQuoteRequest($prospectRequestModel); break;
case 'existing_reservation': $this->erpClient->createAdvRequest($prospectRequestModel); break;
case 'group_travel': $this->erpClient->createTravelRequest($prospectRequestModel); break;
default: $this->erpClient->createContactRequest($prospectRequestModel); break;
}
}
catch (\Exception $exception) {
if ($exception->getCode() === Response::HTTP_NOT_ACCEPTABLE) {
$form->addError(new FormError($exception->getMessage()));
}
else {
$form->addError(new FormError("Une erreur est survenue lors du traitement de votre demande. Merci de réessayer plus tard."));
}
$success = false;
}
}
return $this->render('pages/_includes/partials/_popup_recall_form_fragment.html.twig', [
'contactRequestForm' => $form->createView(),
'success' => $success,
]);
}
}