src/Controller/DemandeController.php line 172

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\HttpFoundation\Response;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use App\Controller\AbstractController;
  6. use App\Form\AnnuaireType;
  7. use App\Misc\StringUtils;
  8. use App\Entity\Demande;
  9. use App\Entity\Mail;
  10. use App\Misc\Flashes;
  11. use DateTime;
  12. use Knp\Component\Pager\PaginatorInterface;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Component\Mailer\MailerInterface;
  15. use Symfony\Component\Mime\Address;
  16. use Symfony\Component\String\Slugger\SluggerInterface;
  17. class DemandeController extends AbstractController
  18. {
  19. public function demandeForm(Request $request, SluggerInterface $slugger, MailerInterface $mailer)
  20. {
  21. if ($request->isMethod('POST') && $request->get('demande')) {
  22. $fromPreForm = false;
  23. // because a full form would override the demande with null data
  24. $preDemande = !empty($request->get('demande')['pre_demande']);
  25. $form = $this->getDemandeForm(null, $preDemande);
  26. $form->handleRequest($request);
  27. $demande = $form->getData();
  28. if ($request->get('emptyCategorie') && !$demande->getCategorie()) {
  29. $demande->setCategorie($this->getCategorieRepository()->find($request->get('emptyCategorie')));
  30. }
  31. if ($request->get('currentCategorie') && !$demande->getCategorie()) {
  32. $demande->setCategorie($this->getCategorieRepository()->find($request->get('currentCategorie')));
  33. }
  34. if (!$demande->getCategorie()) {
  35. $demande->setCategorie($this->getCategorieRepository()->find(72));
  36. }
  37. if (!$demande->isEmpty()) {
  38. $this->getSession()->set('demande', $demande);
  39. }
  40. if ($preDemande) {
  41. $this->getSession()->set('pre_demande', $demande);
  42. return $this->redirectToRoute('public_demande_form');
  43. }
  44. if ($form->isValid()) {
  45. /** @var Demande $demande */
  46. if (!$prix = $demande->getCategorie()->getPrix()) {
  47. $prix = $demande->getCategorie()->getParent()->getPrix();
  48. }
  49. $demande->setPrix($prix);
  50. if (!$credits = $demande->getCategorie()->getCredits()) {
  51. $credits = $demande->getCategorie()->getParent()->getCredits();
  52. }
  53. $demande->setCredits($credits);
  54. $demande->setStatus(Demande::STATUS_NEW);
  55. $demande->setExpiration(new DateTime('+7days'));
  56. // Description file
  57. if ($file = $request->files->get('descriptionFile')):
  58. $filename = $slugger->slug('demande-descriptif-' . uniqid()) . '.' . $file->guessExtension();
  59. $file->move($this->getParameter('kernel.project_dir') . '/public/' . $this->getParameter('demande_files_path'), $filename);
  60. $demande->setDescriptionFile($filename);
  61. $demande->setDescriptionFilePath($filename);
  62. endif;
  63. // Photo
  64. if ($file = $request->files->get('bienPhoto')):
  65. $filename = $slugger->slug('demande-photo-' . uniqid()) . '.' . $file->guessExtension();
  66. $file->move($this->getParameter('kernel.project_dir') . '/public/' . $this->getParameter('demande_files_path'), $filename);
  67. $demande->setBienPhoto($filename);
  68. $demande->setBienPhotoPath($filename);
  69. endif;
  70. if ($request->get('estimation') === "on"):
  71. $estimation = true;
  72. else: $estimation = false;
  73. endif;
  74. $demande->setEstimation($estimation);
  75. $this->getEM()->beginTransaction();
  76. $this->getEM()->persist($form->getData());
  77. $this->getSession()->remove('demande');
  78. $this->getEM()->flush();
  79. // $mail = new Mail();
  80. // $mail
  81. // ->setFromEmail($this->getParameter('email_from'))
  82. // ->setFromName($this->getParameter('name_from'))
  83. // ->setToEmail($this->getParameter('admin_email'))
  84. // ->setSubject('Une nouvelle demande de devis a été déposée')
  85. // ->setContent($this->render('Email/new_demande_admin.html.twig', ['demande' => $demande]))
  86. // ->setStatus('new');
  87. // $this->getEM()->persist($mail);
  88. // $this->getEM()->flush();
  89. // $email = (new TemplatedEmail())
  90. // ->from(new Address($this->getParameter('email_from'), $this->getParameter('name_from')))
  91. // ->to(new Address($this->getParameter('admin_email')))
  92. // ->subject('Une nouvelle demande de devis a été déposée')
  93. // ->htmlTemplate('Email/new_demande_admin.html.twig')
  94. // ->context([
  95. // 'demande' => $demande,
  96. // ])
  97. // ;
  98. // $mailer->send($email);
  99. $this->getEM()->commit();
  100. $this->addFlash(Flashes::SUCCESS, 'Votre demande a été envoyée. Elle sera traitée dans les plus brefs délais.');
  101. return $this->redirectToRoute('public_demande_form');
  102. } else {
  103. $this->addFlash(Flashes::ERROR, 'Votre formulaire comporte des erreurs.');
  104. }
  105. } else {
  106. $demande = $this->getSession()->get('pre_demande');
  107. if ($demande) {
  108. $fromPreForm = true;
  109. $this->getSession()->remove('pre_demande');
  110. } else {
  111. $fromPreForm = false;
  112. // $demande = $this->getSession()->get('demande');
  113. }
  114. if (!$demande && $request->get('cp')) {
  115. $demande = new Demande();
  116. $demande->setBienCodePostal($request->get('cp'));
  117. }
  118. $form = $this->getDemandeForm($demande, false, $request->get('cid'));
  119. }
  120. $demande = $form->getData();
  121. $demande->setBienPhoto(null);
  122. $demande->setDescriptionFile(null);
  123. return $this->render('Public/demande_form.html.twig', array(
  124. 'demande_form' => $form->createView(),
  125. 'from_pre_form' => $fromPreForm,
  126. ));
  127. }
  128. public function demandes(Request $request, PaginatorInterface $paginator)
  129. {
  130. // $limit = $this->container->getParameter('demandes_page_size');
  131. $annuaireForm = $this->createForm(AnnuaireType::class, null, array(
  132. 'action' => $this->generateUrl('public_demandes'),
  133. 'method' => 'GET',
  134. 'prestataire' => false
  135. ));
  136. $annuaireForm->handleRequest($request);
  137. $repo = $this->getDemandeRepository();
  138. // $offset = $this->getOffset($request->get('page'), $limit);
  139. // $diagnosticsGroupId = $this->container->getParameter('group_diagnostics');
  140. // $demandes = $repo->search($annuaireForm->getData(), $limit, $offset);
  141. // $total = $repo->searchCount($annuaireForm->getData());
  142. $data = $paginator->paginate(
  143. $repo->getSearchQuery($annuaireForm->getData()),
  144. $request->query->getInt('page', 1),
  145. $this->getParameter('group_diagnostics')
  146. );
  147. $params = array(
  148. 'form' => $annuaireForm->createView(),
  149. 'data' => $data
  150. // 'demandes' => $demandes,
  151. // 'total' => $total,
  152. // 'limit' => $limit
  153. );
  154. // DEBUG SLOTE
  155. if (!$data->getItems()) {
  156. // echo "Not Data";
  157. $params = array(
  158. 'form' => $annuaireForm->createView(),
  159. 'data' => null
  160. );
  161. }
  162. if ($this->isGranted('ROLE_PRESTATAIRE')) {
  163. return $this->render('Presta/demandes.html.twig', $params);
  164. } else {
  165. return $this->render('Public/demandes.html.twig', $params);
  166. }
  167. }
  168. public function demande($id, $categorie)
  169. {
  170. /** @var Demande $demande */
  171. $demande = $this->getDemandeRepository()->find($id);
  172. if (!$demande) {
  173. return $this->throw404();
  174. }
  175. // 301 redirect if $title is different from the actual sanitized title
  176. $sanitized = StringUtils::sanitizeString($demande->getCategorie()->getNom());
  177. if ($sanitized != $categorie) {
  178. return $this->redirectToRoute('public_demande', array(
  179. 'id' => $id,
  180. 'categorie' => $sanitized
  181. ), Response::HTTP_MOVED_PERMANENTLY);
  182. }
  183. if ($demande->isDisabled() || $demande->isDeleted()) {
  184. // return $this->render('Public/demande_disabled.html.twig', array(
  185. // 'demande' => $demande
  186. // ));
  187. $params = array(
  188. 'demande' => $demande
  189. );
  190. if ($this->isGranted('ROLE_PRESTATAIRE')) {
  191. return $this->render('Presta/demande_disabled.html.twig', $params);
  192. } else {
  193. return $this->render('Public/demande_disabled.html.twig', $params);
  194. }
  195. }
  196. $showContactDetail = false;
  197. $prestataire = $this->getPrestataire();
  198. if ($prestataire) {
  199. $showContactDetail = $this->getDemandeRepository()->isBoughtBy($demande, $prestataire);
  200. }
  201. $bought = $this->getDemandeRepository()->getBought($demande->getId());
  202. $remain = $this->getParameter('request_max_purchase') - $bought;
  203. $params = array(
  204. 'demande' => $demande,
  205. 'bought' => $bought,
  206. 'remain' => $remain,
  207. 'boughtStatus' => Demande::STATUS_BOUGHT,
  208. 'prestataire' => $prestataire,
  209. 'showContactDetail' => $showContactDetail
  210. );
  211. if ($this->isGranted('ROLE_PRESTATAIRE')) {
  212. return $this->render('Presta/demande.html.twig', $params);
  213. } else {
  214. return $this->render('Public/demande.html.twig', $params);
  215. }
  216. }
  217. }