src/Controller/Front/ServiceController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Controller\Core\BaseFrontController;
  4. use App\Entity\FormQuotationServices;
  5. use App\Entity\Service;
  6. use App\Form\Front\FormQuotationServicesType;
  7. use App\Manager\AdviserUserManager;
  8. use App\Manager\EstablishmentManager;
  9. use App\Manager\FormQuotationServicesManager;
  10. use App\Manager\RequestServiceManager;
  11. use App\Manager\ServiceManager;
  12. use App\Manager\ServicesManager;
  13. use App\Manager\UserClientManager;
  14. use App\Service\Mail\QuotationServicesMail;
  15. use App\Service\Mail\RequestServiceAdviserMail;
  16. use App\Service\Mail\RequestServiceClientMail;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class ServiceController extends BaseFrontController
  23. {
  24.     const FORM_QUOTATION_SERVICE 'sd_form_quotation_service_entity';
  25.     /**
  26.      * @Route("/servicios", name="services")
  27.      * @Template("front/services/services.html.twig")
  28.      */
  29.     public function services(ServicesManager $servicesManagerServiceManager $serviceManager): array
  30.     {
  31.         $this->locals['sd'] = $servicesManager->find(1);
  32.         $this->locals['services'] = $serviceManager->valid();
  33.         return $this->locals;
  34.     }
  35.     /**
  36.      * @Route("/servicio/{slug}", name="service", methods={"GET"})
  37.      * @Template("front/services/service.html.twig")
  38.      */
  39.     public function service(string $slugServiceManager $serviceManagerAdviserUserManager $adviserUserManagerEstablishmentManager $establishmentManager): array
  40.     {
  41.         /** @var Service|null $service */
  42.         $service $serviceManager->bySlug($slug);
  43.         if (is_null($service)) {
  44.             throw new NotFoundHttpException('Service not found');
  45.         }
  46.         $entity $this->getFormSession(self::FORM_QUOTATION_SERVICE, new FormQuotationServices());
  47.         $form $this->getFormView(FormQuotationServicesType::class, $entity'service_action', ['slug' => $slug]);
  48.         $this->locals['service'] = $service;
  49.         $this->locals['advisers'] = $adviserUserManager->serviceAdviser();
  50.         $this->locals['establishments'] = $establishmentManager->inFormQuotationServices();
  51.         $this->locals['form'] = $form;
  52.         $this->locals['page_type'] = 'services';
  53.         return $this->locals;
  54.     }
  55.     /**
  56.      * @Route("/servicio/{slug}", name="service_action", methods={"POST"})
  57.      */
  58.     public function serviceAction(string $slugRequest $requestServiceManager $serviceManagerUserClientManager $userClientManagerRequestServiceManager $requestServiceManagerAdviserUserManager $adviserUserManagerFormQuotationServicesManager $managerQuotationServicesMail $mailRequestServiceAdviserMail $requestServiceAdviserMailRequestServiceClientMail $requestServiceClientMail): RedirectResponse
  59.     {
  60.         /** @var Service|null $service */
  61.         $service $serviceManager->bySlug($slug);
  62.         if (is_null($service)) {
  63.             throw new NotFoundHttpException('Service not found');
  64.         }
  65.         $entity = new FormQuotationServices();
  66.         $form $this->getForm(FormQuotationServicesType::class, $entity'quotation_services_action', ['slug' => $slug]);
  67.         $form->handleRequest($request);
  68.         $entity->setService($service->getTitle());
  69.         $adviserId $request->request->getInt('adviser_id');
  70.         $adviser $adviserUserManager->byId($adviserId);
  71.         if (is_null($adviser)) {
  72.             $adviser $adviserUserManager->serviceRandom();
  73.         }
  74.         $entity->setAdviser($adviser);
  75.         if ($form->isValid()) {
  76.             $entity $manager->save($entity);
  77.             $user $userClientManager->byDocument($entity->getDocumentNumber());
  78.             $user $user ? : $userClientManager->byEmail($entity->getEmail());
  79.             if (is_null($user)) {
  80.                 $user $userClientManager->generate($entity->getEmail(), $entity->getName(), $entity->getDocumentNumber(), $entity->getPhone());
  81.             }
  82.             $requestService $requestServiceManager->fromQuotation($user$adviser$entity);
  83.             $mail->load($entity)->send();
  84.             $requestServiceAdviserMail->load($requestService)->send();
  85.             $requestServiceClientMail->load($requestService)->send();
  86.             return $this->redirectToRoute('thanks_slug', ['slug' => 'cotizar-' $service->getSlug()]);
  87.         }
  88.         $this->saveFormSession(self::FORM_QUOTATION_SERVICE$entity);
  89.         return $this->redirectToRoute('service', ['slug' => $slug]);
  90.     }
  91. }