<?php
namespace App\Controller;
use Doctrine\ORM\EntityNotFoundException;
use Symfony\Component\HttpFoundation\Request;
use App\Controller\AbstractController;
use App\Entity\Demande;
use App\Entity\Page;
use App\Entity\RemoteDemande;
use App\Form\RemoteDemandeType;
use DateTime;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Address;
class AppController extends AbstractController
{
public function index(Request $request)
{
$page = $this->getPageRepository()->getByType(Page::TYPE_INDEX);
$texteQuiSommesNous = $this->getPageRepository()->findOneByType(Page::TYPE_INDEX)->getContent();
return $this->render('Public/index.html.twig', ['page' => $page, 'texte_qui_sommes_nous' => $texteQuiSommesNous]);
}
public function remoteDemandeForm(Request $request)
{
$referrer = $request->headers->get('referer');
if ($request->getMethod() === 'POST') {
try {
$remote = $this->hydrateRemoteDemande($request, new RemoteDemande($this->getEm()));
$demande = $remote->getDemande();
if ($demande->getCategorie() === null) {
throw new EntityNotFoundException("Categorie not found in RemoteDemande");
}
if (!$prix = $demande->getCategorie()->getPrix()) {
$prix = $demande->getCategorie()->getParent()->getPrix();
}
$demande->setPrix($prix);
if (!$credits = $demande->getCategorie()->getCredits()) {
$credits = $demande->getCategorie()->getParent()->getCredits();
}
$demande->setCredits($credits);
$demande->setStatus(Demande::STATUS_NEW);
$demande->setCreationDate(new DateTime());
$demande->setProvenance($referrer);
$this->getEM()->beginTransaction();
$this->getEM()->persist($demande);
$this->getEM()->flush();
// $email = (new TemplatedEmail())
// ->from(new Address($this->getParameter('email_from'), $this->getParameter('name_from')))
// ->to(new Address($this->getParameter('admin_email')))
// ->subject('Une nouvelle demande de devis a été déposée')
// ->htmlTemplate('Email/new_demande_admin.html.twig')
// ->context([
// 'demande' => $demande,
// ]
// );
// $this->getMailer()->send($email);
$this->getEM()->commit();
} catch (\Exception $exception) {
return $this->redirectToRoute('public_remote_demande', array(
'redirectTo' => $referrer,
'success' => false
));
}
return $this->redirectToRoute('public_remote_demande', array(
'redirectTo' => $referrer,
'success' => true
));
}
return $this->render('Public/remote_form.html.twig', array(
'redirectTo' => $request->get('redirectTo'),
'success' => $request->get('success')
));
}
private function hydrateRemoteDemande(Request $request, RemoteDemande $remote): RemoteDemande
{
$projet = $request->get('projet'); // @TODO: côté front il faut mettre à jour les id des catégories
$type = $request->get('type');
$code = $request->get('code');
$ville = $request->get('ville');
$date = $request->get('date');
$pieces = $request->get('pieces');
$surface = $request->get('surface');
$copropriete = $request->get('copropriete');
$gaz15ans = $request->get('gaz15ans');
$electricite15ans = $request->get('electricite15ans');
$etre = $request->get('etre'); // @TODO: Faut il rajouter le status du client dans le formulaire front ?
$nom = $request->get('nom');
$email = $request->get('email');
$telephone = $request->get('telephone');
$message = $request->get('message');
$remote = new RemoteDemande($this->getEM());
$remote->setProjet($projet);
$remote->setType($type);
$remote->setCode($code);
$remote->setVille($ville);
$remote->setDate($date);
$remote->setPieces($pieces);
$remote->setSurface($surface);
$remote->setCopropriete($copropriete);
$remote->setGaz15ans($gaz15ans);
$remote->setElectricite15ans($electricite15ans);
$remote->setEtre($etre ?? Demande::$clientStatuts[3]); // @TODO: Faut il rajouter le status du client dans le formulaire front ?
$remote->setNom($nom);
$remote->setEmail($email);
$remote->setTelephone($telephone);
$remote->setMessage($message);
return $remote;
}
}