<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use App\Controller\AbstractController;
use App\Form\AnnuaireType;
use App\Misc\StringUtils;
use App\Entity\Demande;
use App\Entity\Mail;
use App\Misc\Flashes;
use DateTime;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\String\Slugger\SluggerInterface;
class DemandeController extends AbstractController
{
public function demandeForm(Request $request, SluggerInterface $slugger, MailerInterface $mailer)
{
if ($request->isMethod('POST') && $request->get('demande')) {
$fromPreForm = false;
// because a full form would override the demande with null data
$preDemande = !empty($request->get('demande')['pre_demande']);
$form = $this->getDemandeForm(null, $preDemande);
$form->handleRequest($request);
$demande = $form->getData();
if ($request->get('emptyCategorie') && !$demande->getCategorie()) {
$demande->setCategorie($this->getCategorieRepository()->find($request->get('emptyCategorie')));
}
if ($request->get('currentCategorie') && !$demande->getCategorie()) {
$demande->setCategorie($this->getCategorieRepository()->find($request->get('currentCategorie')));
}
if (!$demande->getCategorie()) {
$demande->setCategorie($this->getCategorieRepository()->find(72));
}
if (!$demande->isEmpty()) {
$this->getSession()->set('demande', $demande);
}
if ($preDemande) {
$this->getSession()->set('pre_demande', $demande);
return $this->redirectToRoute('public_demande_form');
}
if ($form->isValid()) {
/** @var Demande $demande */
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->setExpiration(new DateTime('+7days'));
// Description file
if ($file = $request->files->get('descriptionFile')):
$filename = $slugger->slug('demande-descriptif-' . uniqid()) . '.' . $file->guessExtension();
$file->move($this->getParameter('kernel.project_dir') . '/public/' . $this->getParameter('demande_files_path'), $filename);
$demande->setDescriptionFile($filename);
$demande->setDescriptionFilePath($filename);
endif;
// Photo
if ($file = $request->files->get('bienPhoto')):
$filename = $slugger->slug('demande-photo-' . uniqid()) . '.' . $file->guessExtension();
$file->move($this->getParameter('kernel.project_dir') . '/public/' . $this->getParameter('demande_files_path'), $filename);
$demande->setBienPhoto($filename);
$demande->setBienPhotoPath($filename);
endif;
if ($request->get('estimation') === "on"):
$estimation = true;
else: $estimation = false;
endif;
$demande->setEstimation($estimation);
$this->getEM()->beginTransaction();
$this->getEM()->persist($form->getData());
$this->getSession()->remove('demande');
$this->getEM()->flush();
// $mail = new Mail();
// $mail
// ->setFromEmail($this->getParameter('email_from'))
// ->setFromName($this->getParameter('name_from'))
// ->setToEmail($this->getParameter('admin_email'))
// ->setSubject('Une nouvelle demande de devis a été déposée')
// ->setContent($this->render('Email/new_demande_admin.html.twig', ['demande' => $demande]))
// ->setStatus('new');
// $this->getEM()->persist($mail);
// $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,
// ])
// ;
// $mailer->send($email);
$this->getEM()->commit();
$this->addFlash(Flashes::SUCCESS, 'Votre demande a été envoyée. Elle sera traitée dans les plus brefs délais.');
return $this->redirectToRoute('public_demande_form');
} else {
$this->addFlash(Flashes::ERROR, 'Votre formulaire comporte des erreurs.');
}
} else {
$demande = $this->getSession()->get('pre_demande');
if ($demande) {
$fromPreForm = true;
$this->getSession()->remove('pre_demande');
} else {
$fromPreForm = false;
// $demande = $this->getSession()->get('demande');
}
if (!$demande && $request->get('cp')) {
$demande = new Demande();
$demande->setBienCodePostal($request->get('cp'));
}
$form = $this->getDemandeForm($demande, false, $request->get('cid'));
}
$demande = $form->getData();
$demande->setBienPhoto(null);
$demande->setDescriptionFile(null);
return $this->render('Public/demande_form.html.twig', array(
'demande_form' => $form->createView(),
'from_pre_form' => $fromPreForm,
));
}
public function demandes(Request $request, PaginatorInterface $paginator)
{
// $limit = $this->container->getParameter('demandes_page_size');
$annuaireForm = $this->createForm(AnnuaireType::class, null, array(
'action' => $this->generateUrl('public_demandes'),
'method' => 'GET',
'prestataire' => false
));
$annuaireForm->handleRequest($request);
$repo = $this->getDemandeRepository();
// $offset = $this->getOffset($request->get('page'), $limit);
// $diagnosticsGroupId = $this->container->getParameter('group_diagnostics');
// $demandes = $repo->search($annuaireForm->getData(), $limit, $offset);
// $total = $repo->searchCount($annuaireForm->getData());
$data = $paginator->paginate(
$repo->getSearchQuery($annuaireForm->getData()),
$request->query->getInt('page', 1),
$this->getParameter('group_diagnostics')
);
$params = array(
'form' => $annuaireForm->createView(),
'data' => $data
// 'demandes' => $demandes,
// 'total' => $total,
// 'limit' => $limit
);
// DEBUG SLOTE
if (!$data->getItems()) {
// echo "Not Data";
$params = array(
'form' => $annuaireForm->createView(),
'data' => null
);
}
if ($this->isGranted('ROLE_PRESTATAIRE')) {
return $this->render('Presta/demandes.html.twig', $params);
} else {
return $this->render('Public/demandes.html.twig', $params);
}
}
public function demande($id, $categorie)
{
/** @var Demande $demande */
$demande = $this->getDemandeRepository()->find($id);
if (!$demande) {
return $this->throw404();
}
// 301 redirect if $title is different from the actual sanitized title
$sanitized = StringUtils::sanitizeString($demande->getCategorie()->getNom());
if ($sanitized != $categorie) {
return $this->redirectToRoute('public_demande', array(
'id' => $id,
'categorie' => $sanitized
), Response::HTTP_MOVED_PERMANENTLY);
}
if ($demande->isDisabled() || $demande->isDeleted()) {
// return $this->render('Public/demande_disabled.html.twig', array(
// 'demande' => $demande
// ));
$params = array(
'demande' => $demande
);
if ($this->isGranted('ROLE_PRESTATAIRE')) {
return $this->render('Presta/demande_disabled.html.twig', $params);
} else {
return $this->render('Public/demande_disabled.html.twig', $params);
}
}
$showContactDetail = false;
$prestataire = $this->getPrestataire();
if ($prestataire) {
$showContactDetail = $this->getDemandeRepository()->isBoughtBy($demande, $prestataire);
}
$bought = $this->getDemandeRepository()->getBought($demande->getId());
$remain = $this->getParameter('request_max_purchase') - $bought;
$params = array(
'demande' => $demande,
'bought' => $bought,
'remain' => $remain,
'boughtStatus' => Demande::STATUS_BOUGHT,
'prestataire' => $prestataire,
'showContactDetail' => $showContactDetail
);
if ($this->isGranted('ROLE_PRESTATAIRE')) {
return $this->render('Presta/demande.html.twig', $params);
} else {
return $this->render('Public/demande.html.twig', $params);
}
}
}