src/Controller/Quote/QuoteRequestController.php line 121

  1. <?php
  2. namespace App\Controller\Quote;
  3. use App\Entity\Quote\QuoteRequest;
  4. use App\Form\Type\Quote\QuoteRequestType;
  5. use App\Repository\Quote\QuoteRequestRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use App\Manager\Quote\QuoteRequestManager;
  10. use App\Service\Quote\QuoteService;
  11. use Sylius\Component\Core\Repository\CustomerRepositoryInterface;
  12. use Sylius\Component\Product\Repository\ProductRepositoryInterface;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. #[Route('/quote-request')]
  18. class QuoteRequestController extends AbstractController
  19. {
  20.     private $manager;
  21.     private $productRepository;
  22.     private $customerRepository;
  23.     public function __construct(
  24.         QuoteRequestManager $manager,
  25.         ProductRepositoryInterface $productRepository,
  26.         CustomerRepositoryInterface $customerRepository,
  27.     ) {
  28.         $this->manager $manager;
  29.         $this->productRepository $productRepository;
  30.         $this->customerRepository $customerRepository;
  31.     }
  32.     #[Route('/new'name'app_frontend_quote_request_new'methods: ['GET''POST'])]
  33.     public function new(Request $request,  MailerInterface $mailerQuoteService $quoteService): Response
  34.     {
  35.         $quoteRequest = new QuoteRequest();
  36.         $this->manager->initFormFileCollection($quoteRequest);
  37.      
  38.         $params $request->get('_route_params'); 
  39.         $params['product'] = $request->query->get('product');
  40.         $form $this->createForm(QuoteRequestType::class, $quoteRequest, ['action' => $this->generateUrl('app_frontend_quote_request_new'$params)]);
  41.         $form->handleRequest($request);
  42.         $product null;
  43.         if ($request->query->get('product') !== null) {
  44.             $product $this->productRepository->find($request->query->get('product'));
  45.         }
  46.         if ($form->isSubmitted() && $form->isValid()) {
  47.             $quoteRequest->setCode($quoteService->generateRandomString());
  48.             if ($product) {
  49.                 $quoteRequest->setProduct($product);
  50.                 $quoteRequest->setType('generic');
  51.             } else {
  52.                 $quoteRequest->setType('specific');
  53.             }
  54.             foreach ($quoteRequest->getAttributes() as $item) {
  55.                 if (!$item->getValue()) {
  56.                     $quoteRequest->removeAttribute($item);
  57.                 }
  58.             }
  59.             foreach ($quoteRequest->getOptions() as $item) {
  60.                 if (!$item->getValue()) {
  61.                     $quoteRequest->removeOption($item);
  62.                 }
  63.             }
  64.             foreach ($quoteRequest->getFiles() as $item) {
  65.                 if (!$item->getFile()) {
  66.                     $quoteRequest->removeFile($item);
  67.                 }
  68.             }
  69.             if ($this->getUser()) {
  70.                 $quoteRequest->setCustomer($this->getUser()->getCustomer());
  71.             }
  72.             $this->manager->save($quoteRequest);
  73.             try {
  74.                 $email = new TemplatedEmail();
  75.                 //$fileName = sprintf('%s.pdf', 'quote_request_' . (new \Datetime('now'))->format('d-m-Y') . '_' . (new \Datetime('now'))->format('H:m:s'));
  76.                 $email
  77.                     ->to($quoteRequest->getEmail())
  78.                     ->subject('Quote Request')
  79.                     ->htmlTemplate('frontend/quote/quote_request/welcome_email.html.twig')
  80.                     ->context([
  81.                         'quote' => $quoteRequest,
  82.                     ])
  83.                     // $pdf is a TCPDF object
  84.                     //->attach($pdf->output($fileName, 'S'), $fileName, 'application/pdf')
  85.                 ;
  86.                 $mailer->send($email);
  87.             } catch (TransportExceptionInterface $e) {
  88.                 //dd($e);
  89.             }
  90.             $this->addFlash('success''app.flash.request_for_quote_successfully');
  91.             return $this->redirectToRoute('app_frontend_alert');
  92.         }
  93.         if ($product) {
  94.             return $this->render('frontend/quote/quote_request/new_with_product.html.twig', [
  95.                 'quote_request' => $quoteRequest,
  96.                 'form' => $form->createView(),
  97.                 'product' => $product
  98.             ]);
  99.         }
  100.         return $this->render('frontend/quote/quote_request/new.html.twig', [
  101.             'quote_request' => $quoteRequest,
  102.             'form' => $form->createView(),
  103.         ]);
  104.     }
  105. }