src/Controller/DevisController.php line 166

  1. <?php
  2. namespace App\Controller;
  3. use App\Form\DevisType;
  4. use App\Services\DbPage;
  5. use Symfony\Component\Mime\Email;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use App\Controller\ConfigurateurController;
  8. use App\Services\MailerHandler;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. class DevisController extends ConfigurateurController
  16. {
  17.     #[Route(
  18.         path: ['fr' => '/{_locale}/devis''en' => '/{_locale}/devis'],
  19.         name'devis',
  20.         methods: ['POST'],
  21.         requirements: [
  22.             '_locale' => 'en|fr',
  23.         ],
  24.         priority2
  25.     )]
  26.     public function devis(Request $requestEntityManagerInterface $entityManager): Response
  27.     {
  28.         if ($this->isAjaxCall($request)) {
  29.             $content $this->getJsonContent($request);
  30.             $session $request->getSession();
  31.             $sessionDevis $session->get('devis');
  32.             $devis $content;
  33.             if (!$sessionDevis) {
  34.                 $sessionDevis = [];
  35.                 $bytesReference openssl_random_pseudo_bytes(16);
  36.                 $reference md5(bin2hex($bytesReference));
  37.             } else {
  38.                 $reference $sessionDevis[0]['ref'];
  39.             }
  40.             $idDevis null;
  41.             $devisWithFile null;
  42.             $sessionDevisId null;
  43.             if (count($sessionDevis) < 1) {
  44.                 $idDevis 1;
  45.             } else {
  46.                 $idsDevis array_column($sessionDevis'id_devis');
  47.                 rsort($idsDevis);
  48.                 $idDevis $idsDevis[0] + 1;
  49.                 foreach ($sessionDevis as $key => $value) {
  50.                     if ($value['id_devis'] == $idsDevis[0]) {
  51.                         if (array_key_exists('files'$value) && !array_key_exists('description'$value)) {
  52.                             $devisWithFile $sessionDevis[$key];
  53.                             $sessionDevisId $key;
  54.                             break;
  55.                         }
  56.                     }
  57.                 }
  58.             }
  59.             if ($devisWithFile) {
  60.                 $devis['id_devis'] = $devisWithFile['id_devis'];
  61.                 $devis['ref'] = $devisWithFile['ref'];
  62.                 $devis['files'] = $devisWithFile['files'];
  63.                 $sessionDevis[$sessionDevisId] = $devis;
  64.             } else {
  65.                 $devis['id_devis'] = $idDevis;
  66.                 $devis['ref'] = $reference;
  67.                 $sessionDevis[] = $devis;
  68.             }
  69.             $session->set('devis'$sessionDevis);
  70.             return new JsonResponse($sessionDevis);
  71.         }
  72.     }
  73.     #[Route(
  74.         path: ['fr' => '/{_locale}/devis/remove''en' => '/{_locale}/devis/remove'],
  75.         name'devis_remove',
  76.         methods: ['POST'],
  77.         requirements: [
  78.             '_locale' => 'en|fr',
  79.         ],
  80.         priority2
  81.     )]
  82.     public function devis_remove(Request $requestEntityManagerInterface $entityManager): Response
  83.     {
  84.         if ($this->isAjaxCall($request)) {
  85.             $content $this->getJsonContent($request);
  86.             $session $request->getSession();
  87.             $sessionDevis $session->get('devis');
  88.             foreach ($sessionDevis as $key => $value) {
  89.                 if ($value['id_devis'] == $content['id']) {
  90.                     if (array_key_exists('files'$value)) {
  91.                         foreach ($value['files'] as $file) {
  92.                             $filePath $this->getParameter('kernel.project_dir');
  93.                             $chemin =  $filePath '/public/upload/' $file['filename'];
  94.                             if (file_exists($chemin)) {
  95.                                 unlink($chemin);
  96.                             }
  97.                         }
  98.                     }
  99.                     unset($sessionDevis[$key]);
  100.                     break;
  101.                 }
  102.             }
  103.             $session->set('devis'$sessionDevis);
  104.             return new JsonResponse($sessionDevis);
  105.         }
  106.     }
  107.     #[Route(
  108.         path: ['fr' => '/{_locale}/devis/update''en' => '/{_locale}/devis/update'],
  109.         name'devis_update',
  110.         methods: ['POST'],
  111.         requirements: [
  112.             '_locale' => 'en|fr',
  113.         ],
  114.         priority2
  115.     )]
  116.     public function devis_update(Request $requestEntityManagerInterface $entityManager): Response
  117.     {
  118.         if ($this->isAjaxCall($request)) {
  119.             $content $this->getJsonContent($request);
  120.             $session $request->getSession();
  121.             $sessionDevis $session->get('devis');
  122.             foreach ($sessionDevis as $key => $value) {
  123.                 if ($value['id_devis'] == $content['id']) {
  124.                     $sessionDevis[$key]['qty'] = $content['qty'];
  125.                     break;
  126.                 }
  127.             }
  128.             $session->set('devis'$sessionDevis);
  129.             return new JsonResponse($sessionDevis);
  130.         }
  131.     }
  132.     #[Route(
  133.         path: ['fr' => '/{_locale}/devis/form''en' => '/{_locale}/devis/form'],
  134.         name'devis_form',
  135.         methods: ['GET''POST'],
  136.         requirements: [
  137.             '_locale' => 'en|fr',
  138.         ],
  139.         priority2
  140.     )]
  141.     public function devis_form(Request $requestMailerHandler $mailerUrlGeneratorInterface $router): Response
  142.     {
  143.         $form $this->createForm(DevisType::class);
  144.         $form->handleRequest($request);
  145.         $data = [];
  146.         $data['error']['societe'] = false;
  147.         $data['error']['email'] = false;
  148.         $data['error']['nom'] = false;
  149.         $data['error']['langue'] = false;
  150.         $error false;
  151.         $session $request->getSession();
  152.         $sessionDevis $session->get('devis');
  153.         if ($form->isSubmitted() && $form->isValid()) {
  154.             $values $form->getData();
  155.             if (trim($values['societe']) == '') {
  156.                 $error true;
  157.                 $data['error']['societe'] = true;
  158.             }
  159.             if (trim($values['email']) == '') {
  160.                 $error true;
  161.                 $data['error']['email'] = true;
  162.             }
  163.             if (trim($values['nom']) == '') {
  164.                 $error true;
  165.                 $data['error']['nom'] = true;
  166.             }
  167.             if (trim($values['langue']) == '') {
  168.                 $error true;
  169.                 $data['error']['langue'] = true;
  170.             }
  171.             if (!$error) {
  172.                 $data['success'] = true;
  173.                 // $mailer->send(['mb@adevo.be'], 'marinebeltus@gmail.com', 'exemple devis', 'devis/mails/new_quotation_client.html.twig', [
  174.                 //     'logo' => 'logo',
  175.                 //     'customer_name' => 'Beltus Marine',
  176.                 //     'id_quot' => '21',
  177.                 //     'shop_name' => "Sensy",
  178.                 //     'customerquotations_URL' => 'url'
  179.                 // ]);
  180.                 // $mailer->send(['mb@adevo.be'], 'marinebeltus@gmail.com', 'exemple devis', 'devis/mails/new_quotation.html.twig', [
  181.                 //     'logo' => 'logo',
  182.                 //     'customer_details' => 'Beltus Marine',
  183.                 //     'quotation_ID' => '21',
  184.                 //     'shop_name' => "Sensy"
  185.                 // ]);
  186.             } else {
  187.                 $data['success'] = false;
  188.             }
  189.             $session->set('devis', []);
  190.         }
  191.         $link $router->generate($request->attributes->get('_route'));
  192.         $breadcrumb = array(['name' => 'Devis''link_rewrite' => 'devis/form']);
  193.         return $this->render('devis/devis.form.html.twig', ['products' => $sessionDevis'link' => $link'data' => $data'formData' => $form->createView(), 'breadcrumb' => $breadcrumb]);
  194.     }
  195.     #[Route(
  196.         path: ['fr' => '/{_locale}/devis/remove-file''en' => '/{_locale}/devis/remove-file'],
  197.         name'devis_remove_file',
  198.         methods: ['POST'],
  199.         requirements: [
  200.             '_locale' => 'en|fr',
  201.         ],
  202.         priority2
  203.     )]
  204.     public function devis_removeFile(Request $requestEntityManagerInterface $entityManager): Response
  205.     {
  206.         if ($this->isAjaxCall($request)) {
  207.             $content $this->getJsonContent($request);
  208.             $idFile $content['idFile'];
  209.             $idDevis $content['idDevis'];
  210.             $session $request->getSession();
  211.             $sessionDevis $session->get('devis');
  212.             foreach ($sessionDevis as $key => $value) {
  213.                 if ($value['id_devis'] == $idDevis) {
  214.                     foreach ($value['files'] as $keyFile => $file) {
  215.                         if ($file['id'] == $idFile) {
  216.                             $filePath $this->getParameter('kernel.project_dir');
  217.                             $chemin =  $filePath '/public/upload/' $file['filename'];
  218.                             if (file_exists($chemin)) {
  219.                                 unlink($chemin);
  220.                             }
  221.                             unset($value['files'][$keyFile]);
  222.                             $reasort array_values($value['files']);
  223.                             $value['files'] = $reasort;
  224.                             $sessionDevis[$key] = $value;
  225.                             break;
  226.                         }
  227.                     }
  228.                 }
  229.             }
  230.             $session->set('devis'$sessionDevis);
  231.             return new JsonResponse($sessionDevis);
  232.         }
  233.     }
  234. }