src/Controller/ClientController.php line 370

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Client;
  4. use App\Entity\Brand;
  5. use App\Form\ClientType;
  6. use App\Repository\ClientRepository;
  7. use App\Repository\CarSaleRepository;
  8. use App\Repository\CarBuyRepository;
  9. use App\Repository\BrandRepository;
  10. use App\Repository\UserRepository;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route("/client")
  17.  */
  18. class ClientController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/indexJson", name="client_index_json", methods={"GET", "POST"})
  22.      */
  23.     public function indexJson(Request $requestClientRepository $entityRepositoryCarSaleRepository $carSaleRepository): Response
  24.     {
  25.         /*---- Filters [START] ----*/
  26.         $search       $request->get('searchPhrase');
  27.         $dateFrom     $request->get('dateFrom').' 00:00:00';
  28.         $dateTo       $request->get('dateTo').' 23:59:59';
  29.         $dateFilter   $request->get('dateFilter');
  30.         $operFilter   $request->get('operationsFilter');
  31.         $patentFilter $request->get('patentFilter');
  32.         //exit($dateFrom.';'.$dateTo);
  33.         if (!empty($search)) {
  34.         }
  35.         /*---- Filters [END] ----*/
  36.         $totalR 0;
  37.         $curPage   $request->get('current');
  38.         $sizePage  $request->get('rowCount');
  39.         $startPage $curPage == : (($curPage 1) * $sizePage);
  40.         $data $entityRepository->createQueryBuilder('c')
  41.             ->where('c.id > :id')
  42.             ->setParameter('id''0');
  43.         if ($patentFilter == 'true') {
  44.         } else {
  45.             $data $data->andWhere('c.firstName like :search')
  46.                 ->orWhere('c.lastName like :search')
  47.                 ->orWhere('c.dni like :search')
  48.                 ->orWhere('c.telephone like :search')
  49.                 ->orWhere('c.cellphone like :search')
  50.                 ->orWhere('c.address like :search')
  51.                 ->setParameter(':search'"%$search%");
  52.         }
  53.         if ($dateFilter == 'true') {
  54.             $data $data->andWhere('c.createdAt BETWEEN :dateFrom AND :dateTo')
  55.                 ->setParameter(':dateFrom'$dateFrom)
  56.                 ->setParameter(':dateTo'$dateTo);
  57.         }
  58.         $data $data->leftJoin('c.user''u')
  59.             ->addSelect('u');
  60.         if ($this->getUser()->getRoles()[0] == 'ROLE_ADMIN' || $this->getUser()->getRoles()[0] == 'ROLE_AGENCY') {
  61.         } else {
  62.             $data $data->having('u.id = :user')
  63.                 ->setParameter(':user'$this->getUser()->getId());
  64.         }
  65.         //dump($data->getDQL()); exit();
  66.         if ($operFilter == 'true') {
  67.             $filterPatent '';
  68.             if ($patentFilter == 'true') {
  69.                 $filterPatent "
  70.                 LEFT JOIN car c ON c.id = cs.car_sale_id
  71.                 WHERE c.patent like '%$search%'";
  72.             }
  73.             $query "
  74.                 SELECT DISTINCT cs.client_id, cs.client_id
  75.                 FROM car_sale cs  
  76.                 $filterPatent
  77.             ";
  78.             $em $this->getDoctrine()->getManager();
  79.             $db $em->getConnection();
  80.             $stmt   $db->prepare($query);
  81.             $result $stmt->executeQuery();
  82.             $sales $result->fetchAllKeyValue();
  83.             $aOperFilter = array();
  84.             foreach ($sales as $item) {
  85.                 $aOperFilter[] = $item;
  86.             }
  87.             $filterPatent '';
  88.             if ($patentFilter == 'true') {
  89.                 $filterPatent "
  90.                 LEFT JOIN car c ON c.id = cb.car_id
  91.                 WHERE c.patent like '%$search%'";
  92.             }
  93.             $query "
  94.                 SELECT DISTINCT cb.client_id, cb.client_id
  95.                 FROM car_buy cb  
  96.                 $filterPatent
  97.             ";
  98.             $em $this->getDoctrine()->getManager();
  99.             $db $em->getConnection();
  100.             $stmt   $db->prepare($query);
  101.             $result $stmt->executeQuery();
  102.             $purchases $result->fetchAllKeyValue();
  103.             foreach ($purchases as $item) {
  104.                 $aOperFilter[] = $item;
  105.             }
  106.             //dump($aOperFilter); exit();
  107.             //dump(implode(',', $aOperFilter)); exit();
  108.             if (count($aOperFilter) > 0) {
  109.                 $data $data->andWhere('c.id IN (:clients)')
  110.                     ->setParameter(':clients'$aOperFilter);
  111.             } else if ($patentFilter == 'true') {
  112.                 $data $data->andWhere('c.id IN (:clients)')
  113.                     ->setParameter(':clients'0);
  114.             }
  115.         }
  116.         //echo $search.'<br>'; print_r($aOperFilter); exit();
  117.         //echo $data->getQuery()->getSQL(); exit();
  118.         $total $data->getQuery()
  119.             ->getArrayResult();
  120.         $data $data->setFirstResult($startPage)
  121.             ->setMaxResults($sizePage)
  122.             ->getQuery()
  123.             ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNStrue)
  124.             ->getArrayResult();
  125.         //dump($total); exit();
  126.         //dump($data); exit();
  127.         /*
  128.         if ($this->getUser()->getRoles()[0] == 'ROLE_ADMIN') {
  129.             if ($dateFilter == 'true') {
  130.                 $data = $entityRepository->createQueryBuilder('c')
  131.                     ->leftJoin('c.user', 'u')
  132.                     ->addSelect('u')
  133.                     ->where('c.id > :id')
  134.                     ->andWhere('c.firstName like :search')
  135.                     ->orWhere('c.lastName like :search')
  136.                     ->orWhere('c.dni like :search')
  137.                     ->orWhere('c.telephone like :search')
  138.                     ->orWhere('c.cellphone like :search')
  139.                     ->orWhere('c.address like :search')
  140.                     ->andWhere('c.createdAt BETWEEN :dateFrom AND :dateTo')
  141.                     ->setParameter('id', '0')
  142.                     ->setParameter(':search', "%$search%")
  143.                     ->setParameter(':dateFrom', $dateFrom)
  144.                     ->setParameter(':dateTo', $dateTo)
  145.                     ->getQuery()
  146.                     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
  147.                     ->getArrayResult();
  148.                     //dump($data->getSql());
  149.                     //dump($data->getParameters());
  150.                     //exit();
  151.             } else {
  152.                 $data = $entityRepository->createQueryBuilder('c')
  153.                     ->leftJoin('c.user', 'u')
  154.                     ->addSelect('u')
  155.                     ->where('c.id > :id')
  156.                     ->andWhere('c.firstName like :search')
  157.                     ->orWhere('c.lastName like :search')
  158.                     ->orWhere('c.dni like :search')
  159.                     ->orWhere('c.telephone like :search')
  160.                     ->orWhere('c.cellphone like :search')
  161.                     ->orWhere('c.address like :search')
  162.                     ->setParameter('id', '0')
  163.                     ->setParameter(':search', "%$search%")
  164.                     ->getQuery()
  165.                     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
  166.                     ->getArrayResult();
  167.                 //dump($data->getSql()); exit();
  168.             }
  169.         } else {
  170.             if ($dateFilter == 'true') {
  171.                 $data = $entityRepository->createQueryBuilder('c')
  172.                     ->where('c.id > :id')
  173.                     ->andWhere('c.firstName like :search')
  174.                     ->andWhere('c.createdAt BETWEEN :dateFrom AND :dateTo')
  175.                     ->orWhere('c.lastName like :search')
  176.                     ->orWhere('c.dni like :search')
  177.                     ->orWhere('c.telephone like :search')
  178.                     ->orWhere('c.cellphone like :search')
  179.                     ->orWhere('c.address like :search')
  180.                     ->setParameter('id', '0')
  181.                     ->having('c.user = :user')
  182.                     ->setParameter(':search', "%$search%")
  183.                     ->setParameter(':user', $this->getUser()->getId())
  184.                     ->setParameter(':dateFrom', $dateFrom)
  185.                     ->setParameter(':dateTo', $dateTo)
  186.                     ->getQuery()
  187.                     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
  188.                     ->getArrayResult();
  189.             } else {
  190.                 $data = $entityRepository->createQueryBuilder('c')
  191.                     ->where('c.id > :id')
  192.                     ->andWhere('c.firstName like :search')
  193.                     ->orWhere('c.lastName like :search')
  194.                     ->orWhere('c.dni like :search')
  195.                     ->orWhere('c.telephone like :search')
  196.                     ->orWhere('c.cellphone like :search')
  197.                     ->orWhere('c.address like :search')
  198.                     ->setParameter('id', '0')
  199.                     ->having('c.user = :user')
  200.                     ->setParameter(':search', "%$search%")
  201.                     ->setParameter(':user', $this->getUser()->getId())
  202.                     ->getQuery()
  203.                     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
  204.                     ->getArrayResult();
  205.             }
  206.         }
  207.         */
  208.         $json_data = array(
  209.             "current" => intval($curPage),
  210.             "rowCount" => $sizePage,
  211.             "total" => count($total),
  212.             "rows" => $data,
  213.         );
  214.         return $this->json($json_data);
  215.     }
  216.     /**
  217.      * @Route("/clientList", name="client_list", methods={"GET", "POST"})
  218.      */
  219.     public function clientList(Request $requestClientRepository $entityRepository): Response
  220.     {
  221.         $list '<option value=""></option>';
  222.         $data $entityRepository->findAll();
  223.         foreach ($data as $item) {
  224.             $list .= '<option value="'.$item->getId().'">'.$item->getFirstName().' '.$item->getLastName().'</option>';
  225.         }
  226.         return new Response($list);
  227.     }
  228.     /**
  229.      * @Route("/", name="client_index", methods={"GET"})
  230.      */
  231.     public function index(ClientRepository $clientRepositoryCarSaleRepository $carSaleRepositoryCarBuyRepository $carBuyRepository): Response
  232.     {
  233.         $sales     $carSaleRepository->getCountSales();
  234.         $purchases $carBuyRepository->getCountPurchases();
  235.         return $this->render('client/index.html.twig', [
  236.             'clients' => $clientRepository->findAll(),
  237.             'currentMenu' => 'client',
  238.             'sales' => $sales,
  239.             'purchases' => $purchases,
  240.         ]);
  241.     }
  242.     /**
  243.      * @Route("/settings", name="client_settings", methods={"GET"})
  244.      */
  245.     public function settings(ClientRepository $clientRepository): Response
  246.     {
  247.         return $this->render('client/settings.html.twig', [
  248.             'clients' => $clientRepository->findAll(),
  249.             'currentMenu' => 'system',
  250.         ]);
  251.     }
  252.     /**
  253.      * @Route("/new", name="client_new", methods={"GET","POST"})
  254.      */
  255.     public function new(Request $request): Response
  256.     {
  257.         $client = new Client();
  258.         $form $this->createForm(ClientType::class, $client);
  259.         $form->handleRequest($request);
  260.         if ($form->isSubmitted() && $form->isValid()) {
  261.             if ($this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  262.                 $client->SetUser($this->getUser());
  263.             }
  264.             $entityManager $this->getDoctrine()->getManager();
  265.             $entityManager->persist($client);
  266.             $entityManager->flush();
  267.             return $this->redirectToRoute('client_index', [], Response::HTTP_SEE_OTHER);
  268.         }
  269.         return $this->render('client/new.html.twig', [
  270.             'client' => $client,
  271.             'form' => $form->createView(),
  272.             'currentMenu' => 'client',
  273.         ]);
  274.     }
  275.     /**
  276.      * @Route("/new/modal", name="client_new_modal", methods={"GET","POST"})
  277.      */
  278.     public function newModal(Request $request): Response
  279.     {
  280.         $client = new Client();
  281.         $form $this->createForm(ClientType::class, $client, [
  282.             'action' => $this->generateUrl('client_new_modal')
  283.         ]);
  284.         $form->handleRequest($request);
  285.         if ($form->isSubmitted() && $form->isValid()) {
  286.             if ($this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  287.                 $client->SetUser($this->getUser());
  288.             }
  289.             $entityManager $this->getDoctrine()->getManager();
  290.             $entityManager->persist($client);
  291.             try {
  292.                 $entityManager->flush();
  293.                 $status  'success';
  294.                 $message 'New client created';
  295.                 $clientId   $client->getId();
  296.             } catch (\Exception $e) {
  297.                 $status 'error';
  298.                 $message $e->getMessage();
  299.                 $clientId   0;
  300.             }
  301.             $response = array(
  302.                 'status' => $status,
  303.                 'message' => $message,
  304.                 'clientId' => $clientId,
  305.             );
  306.             return $this->json($response);
  307.         }
  308.         return $this->render('client/new_modal.html.twig', [
  309.             'client' => $client,
  310.             'form' => $form->createView(),
  311.             'currentMenu' => 'client',
  312.         ]);
  313.     }
  314.     /**
  315.      * @Route("/{id}", name="client_show", methods={"GET"})
  316.      */
  317.     public function show(Client $client): Response
  318.     {
  319.         return $this->render('client/show.html.twig', [
  320.             'client' => $client,
  321.             'currentMenu' => 'client',
  322.         ]);
  323.     }
  324.     /**
  325.      * @Route("/{id}/modal", name="client_show_modal", methods={"GET"})
  326.      */
  327.     public function showModal(Client $client): Response
  328.     {
  329.         return $this->render('client/show_modal.html.twig', [
  330.             'client' => $client,
  331.             'currentMenu' => 'client',
  332.         ]);
  333.     }
  334.     /**
  335.      * @Route("/{id}/operations", name="client_operations_modal", methods={"GET"})
  336.      */
  337.     public function operationsModal($idClient $clientCarSaleRepository $carSaleRepositoryCarBuyRepository $carBuyRepository): Response
  338.     {
  339.         /*
  340.         $query = "
  341.             SELECT *
  342.             FROM car_sale
  343.             WHERE client_id = $id
  344.         ";
  345.         $em = $this->getDoctrine()->getManager();
  346.         $db = $em->getConnection();
  347.         $stmt      = $db->prepare($query);
  348.         $result    = $stmt->executeQuery();
  349.         $sales = $result->fetchAllKeyValue();
  350.         //$sales = $result->fetchAllAssociativeIndexed();
  351.         */
  352.         $sales     $carSaleRepository->findBy( ['client' => $id] );
  353.         $purchases $carBuyRepository->findBy( ['client' => $id] );
  354.         //dump($purchases); exit();
  355.         return $this->render('client/operations_modal.html.twig', [
  356.             'client' => $client,
  357.             'currentMenu' => 'client',
  358.             'sales' => $sales,
  359.             'purchases' => $purchases,
  360.         ]);
  361.     }
  362.     /**
  363.      * @Route("/{id}/notifications", name="client_notifications_modal", methods={"GET"})
  364.      */
  365.     public function notificationsModal($idClient $clientBrandRepository $entityRepository): Response
  366.     {
  367.         $brand $entityRepository->createQueryBuilder('b')
  368.             ->indexBy('b''b.id')
  369.             ->orderBy('b.name''ASC')
  370.             ->getQuery()
  371.             ->getArrayResult();
  372.         return $this->render('client/notifications_modal.html.twig', [
  373.             'client' => $client,
  374.             'currentMenu' => 'client',
  375.             'brand' => $brand,
  376.         ]);
  377.     }
  378.     /**
  379.      * @Route("/{id}/notificationsSave", name="client_notifications_save", methods={"POST"})
  380.      */
  381.     public function notificationsSave($idClient $clientRequest $request): Response
  382.     {
  383.         $notifyByEmail      $request->get('notification-mail') == 'true' 0;
  384.         $notifyByWhatsapp   $request->get('notification-whatsapp') == 'true' 0;
  385.         $notifyVehicleEntry $request->get('notification-vehicle-entry') == 'true' 0;
  386.         $client->setNotifyByEmail($notifyByEmail);
  387.         $client->setNotifyByWhatsapp($notifyByWhatsapp);
  388.         $client->setNotifyVehicleEntry($notifyVehicleEntry);
  389.         $this->getDoctrine()->getManager()->flush();
  390.         return $this->json('1');
  391.     }
  392.     /**
  393.      * @Route("/{id}/notificationsNewCriteria", name="client_notifications_new_criteria", methods={"POST"})
  394.      */
  395.     public function notificationsNewCriteria($idClient $clientRequest $request): Response
  396.     {
  397.         $brand       $request->get('brand');
  398.         $vehicleName $request->get('vehicle-name');
  399.         if ($client->getNotifyCriteria() != null && count($client->getNotifyCriteria()) > 0) {
  400.             $data $client->getNotifyCriteria();
  401.             $data[$brand][$vehicleName] = $vehicleName;
  402.         } else {
  403.             $data[$brand] = array($vehicleName => $vehicleName);
  404.         }
  405.         $client->setNotifyCriteria($data);
  406.         $this->getDoctrine()->getManager()->flush();
  407.         return $this->json('1');
  408.     }
  409.     /**
  410.      * @Route("/{id}/notificationsShowCriteria", name="client_notifications_show_criteria", methods={"POST"})
  411.      */
  412.     public function notificationsShowCriteria(Client $client): Response
  413.     {
  414.         return $this->json($client->getNotifyCriteria());
  415.     }
  416.     /**
  417.      * @Route("/{id}/notificationsDeleteCriteria", name="client_notifications_delete_criteria", methods={"POST"})
  418.      */
  419.     public function notificationsDeleteCriteria(Client $clientRequest $request): Response
  420.     {
  421.         $brand    $request->get('brand');
  422.         $criteria $request->get('criteria');
  423.         $data $client->getNotifyCriteria();
  424.         unset($data[$brand][$criteria]);
  425.         $client->setNotifyCriteria($data);
  426.         $this->getDoctrine()->getManager()->flush();
  427.         return $this->json('1');
  428.     }
  429.     /**
  430.      * @Route("/oneNotificationSave", name="client_one_notification_save", methods={"POST"})
  431.      */
  432.     public function oneNotificationSave(ClientRepository $clientRequest $request): Response
  433.     {
  434.         $id    $request->get('id');
  435.         $type  $request->get('type');
  436.         $state $request->get('state') == 'true' 0;
  437.         $client $client->find($id);
  438.         switch ($type) {
  439.             case 'e':
  440.                 $client->setNotifyByEmail($state);
  441.                 break;
  442.             case 'w':
  443.                 $client->setNotifyByWhatsapp($state);
  444.                 break;
  445.             case 'v':
  446.                 $client->setNotifyVehicleEntry($state);
  447.                 break;
  448.         }
  449.         $this->getDoctrine()->getManager()->persist($client);
  450.         $this->getDoctrine()->getManager()->flush();
  451.         return $this->json('1');
  452.     }
  453.     /**
  454.      * @Route("/{id}/edit", name="client_edit", methods={"GET","POST"})
  455.      */
  456.     public function edit(Request $requestClient $client): Response
  457.     {
  458.         $form $this->createForm(ClientType::class, $client);
  459.         $form->handleRequest($request);
  460.         if ($form->isSubmitted() && $form->isValid()) {
  461.             if ($this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  462.                 $client->SetUser($this->getUser());
  463.             }
  464.             $this->getDoctrine()->getManager()->flush();
  465.             return $this->redirectToRoute('client_index', [], Response::HTTP_SEE_OTHER);
  466.         }
  467.         return $this->render('client/edit.html.twig', [
  468.             'client' => $client,
  469.             'form' => $form->createView(),
  470.             'currentMenu' => 'client',
  471.         ]);
  472.     }
  473.     /**
  474.      * @Route("/{id}", name="client_delete", methods={"POST"})
  475.      */
  476.     public function delete(Request $requestClient $client): Response
  477.     {
  478.         if ($this->isCsrfTokenValid('delete'.$client->getId(), $request->request->get('_token'))) {
  479.             $entityManager $this->getDoctrine()->getManager();
  480.             $entityManager->remove($client);
  481.             $entityManager->flush();
  482.         }
  483.         return $this->redirectToRoute('client_index', [], Response::HTTP_SEE_OTHER);
  484.     }
  485.     /**
  486.      * @Route("/{id}/delete", name="client_delete_ra", methods={"GET"})
  487.      */
  488.     public function deleteRa(Request $request): Response
  489.     {
  490.         $entityManager $this->getDoctrine()->getManager();
  491.         $user $entityManager->getReference(\App\Entity\Client::class, $request->get('id'));
  492.         $entityManager->remove($user);
  493.         $entityManager->flush();
  494.         return $this->redirectToRoute('client_index', [], Response::HTTP_SEE_OTHER);
  495.     }
  496. }