src/Controller/CarBuyController.php line 289

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CarBuy;
  4. use App\Form\CarBuyType;
  5. use App\Repository\CarBuyRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  11. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  12. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  13. /**
  14.  * @Route("/car/buy")
  15.  */
  16. class CarBuyController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/indexJson", name="car_buy_index_json", methods={"GET", "POST"})
  20.      */
  21.     public function indexJson(Request $requestCarBuyRepository $entityRepository): Response
  22.     {
  23.         /*---- Filters [START] ----*/
  24.         $search $request->get('searchPhrase');
  25.         $isDone $request->get('isDone');
  26.         $curMonth $request->get('curMonth');
  27.         $dateFromRaw    $request->get('dateFrom');
  28.         $dateToRaw      $request->get('dateTo');
  29.         $dateFilter     filter_var($request->get('dateFilter'), FILTER_VALIDATE_BOOLEAN);
  30.         $buyer          $request->get('buyer');
  31.         $dateFrom    $dateFromRaw $dateFromRaw ' 00:00:00' null;
  32.         $dateTo      $dateToRaw $dateToRaw ' 23:59:59' null;
  33.         /*---- Filters [END] ----*/
  34.         $totalR 0;
  35.         $curPage   $request->get('current');
  36.         $sizePage  $request->get('rowCount');
  37.         $startPage $curPage == : (($curPage 1) * $sizePage);
  38.         $data $entityRepository->createQueryBuilder('cb')
  39.             ->leftJoin('cb.car''c')
  40.             ->leftJoin('cb.carSwap''cs')
  41.             ->leftJoin('cb.user''u')
  42.             ->leftJoin('cb.client''cl')
  43.             ->addSelect('c')
  44.             ->addSelect('cs')
  45.             ->addSelect('u')
  46.             ->addSelect('cl')
  47.             ->where('cb.id > :id')
  48.             ->setParameter('id''0')
  49.             ->orderBy('cb.isDoneDate''DESC');
  50.         if ($search !== null && $search !== '') {
  51.             $data->andWhere(
  52.                 $data->expr()->orX(
  53.                     'c.name LIKE :search',
  54.                     'c.patent LIKE :search',
  55.                     'u.firstName LIKE :search',
  56.                     'u.lastName LIKE :search',
  57.                     'cb.price LIKE :search',
  58.                     'cb.origin LIKE :search'
  59.                 )
  60.             )->setParameter(':search'"%$search%");
  61.         }
  62.         if ($isDone !== '' && $isDone !== null) {
  63.             $data->andWhere('cb.isDone = :isDone')
  64.                 ->setParameter(':isDone'$isDone);
  65.         }
  66.         if ($dateFilter && $dateFrom && $dateTo) {
  67.             $data->andWhere('cb.isDoneDate BETWEEN :dateFrom AND :dateTo')
  68.                 ->setParameter(':dateFrom'$dateFrom)
  69.                 ->setParameter(':dateTo'$dateTo);
  70.         }
  71.         if (!empty($buyer)) {
  72.             $data->andWhere('u.id = :buyer')
  73.                 ->setParameter(':buyer'$buyer);
  74.         }
  75.         if ($curMonth === '1') {
  76.             $data->andWhere(
  77.                 $data->expr()->orX(
  78.                     $data->expr()->andX(
  79.                         'cb.isDone = 1',
  80.                         'MONTH(cb.isDoneDate) = MONTH(CURRENT_DATE())',
  81.                         'YEAR(cb.isDoneDate) = YEAR(CURRENT_DATE())'
  82.                     ),
  83.                     'cb.isDone = 0'
  84.                 )
  85.             );
  86.         }
  87.         $total $data->getQuery()
  88.             ->getArrayResult();
  89.         $data $data->setFirstResult($startPage)
  90.             ->setMaxResults($sizePage)
  91.             ->getQuery()
  92.             ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNStrue)
  93.             ->getArrayResult();
  94.         $json_data = array(
  95.             "current" => intval($curPage),
  96.             "rowCount" => $sizePage,
  97.             "total" => count($total),
  98.             "rows" => $data,
  99.         );
  100.         return $this->json($json_data);
  101.     }
  102.     /**
  103.      * @Route("/excel", name="car_buy_excel", methods={"GET", "POST"})
  104.      */
  105.     public function excel(Request $requestCarBuyRepository $entityRepository): Response
  106.     {
  107.         /*---- Filters [START] ----*/
  108.         $search $request->get('searchPhrase');
  109.         $isDone $request->get('isDone');
  110.         $curMonth $request->get('curMonth');
  111.         $dateFromRaw $request->get('dateFrom');
  112.         $dateToRaw   $request->get('dateTo');
  113.         $dateFilter  filter_var($request->get('dateFilter'), FILTER_VALIDATE_BOOLEAN);
  114.         $buyer $request->get('buyer');
  115.         /*---- Filters [END] ----*/
  116.         $totalR 0;
  117.         $curPage $request->get('current');
  118.         $sizePage $request->get('rowCount');
  119.         $data $entityRepository->createQueryBuilder('cb')
  120.             ->leftJoin('cb.car''c')
  121.             ->leftJoin('cb.carSwap''cs')
  122.             ->leftJoin('cb.user''u')
  123.             ->leftJoin('cb.client''cl')
  124.             ->addSelect('c')
  125.             ->addSelect('cs')
  126.             ->addSelect('u')
  127.             ->addSelect('cl')
  128.             ->where('cb.id > :id')
  129.             ->setParameter('id''0');
  130.         if ($search !== null && $search !== '') {
  131.             $data->andWhere(
  132.                 $data->expr()->orX(
  133.                     'c.name LIKE :search',
  134.                     'c.patent LIKE :search',
  135.                     'u.firstName LIKE :search',
  136.                     'u.lastName LIKE :search',
  137.                     'cb.price LIKE :search',
  138.                     'cb.origin LIKE :search'
  139.                 )
  140.             )->setParameter(':search'"%$search%");
  141.         }
  142.         $dateFrom $dateFromRaw $dateFromRaw ' 00:00:00' null;
  143.         $dateTo   $dateToRaw $dateToRaw ' 23:59:59' null;
  144.         if ($isDone !== '' && $isDone !== null) {
  145.             $data->andWhere('cb.isDone = :isDone')
  146.                 ->setParameter(':isDone'$isDone);
  147.         }
  148.         if ($dateFilter && $dateFrom && $dateTo) {
  149.             $data->andWhere('cb.isDoneDate BETWEEN :dateFrom AND :dateTo')
  150.                 ->setParameter(':dateFrom'$dateFrom)
  151.                 ->setParameter(':dateTo'$dateTo);
  152.         }
  153.         if (!empty($buyer)) {
  154.             $data->andWhere('u.id = :buyer')
  155.                 ->setParameter(':buyer'$buyer);
  156.         }
  157.         if ($curMonth === '1') {
  158.             $data->andWhere(
  159.                 $data->expr()->orX(
  160.                     $data->expr()->andX(
  161.                         'cb.isDone = 1',
  162.                         'MONTH(cb.isDoneDate) = MONTH(CURRENT_DATE())',
  163.                         'YEAR(cb.isDoneDate) = YEAR(CURRENT_DATE())'
  164.                     ),
  165.                     'cb.isDone = 0'
  166.                 )
  167.             );
  168.         }
  169.         $data $data->getQuery()
  170.             ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNStrue)
  171.             ->getArrayResult();
  172.         $spreadsheet = new Spreadsheet();
  173.         $sheet $spreadsheet->getActiveSheet();
  174.         $sheet->setTitle('Listado');
  175.         $sheet->getCell('A1')->setValue('Comprador');
  176.         $sheet->getCell('B1')->setValue('Cliente');
  177.         $sheet->getCell('C1')->setValue('Vehículo');
  178.         $sheet->getCell('D1')->setValue('Patente');
  179.         $sheet->getCell('E1')->setValue('Precio Compra');
  180.         $sheet->getCell('F1')->setValue('Adelanto');
  181.         $sheet->getCell('G1')->setValue('Vehículo en parte de pago');
  182.         $sheet->getCell('H1')->setValue('Permuta');
  183.         $sheet->getCell('I1')->setValue('Finalizada');
  184.         $sheet->getCell('J1')->setValue('Origen');
  185.         $sheet->getCell('K1')->setValue('Creado');
  186.         $sheet->getCell('L1')->setValue('Modificado');
  187.         foreach(range('A','L') as $columnID) {
  188.             $sheet->getColumnDimension($columnID)->setAutoSize(true);
  189.         }
  190.         $sheet->getStyle('A1:L1')
  191.             ->getFill()
  192.             ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
  193.             ->getStartColor()->setRGB('dedede');
  194.         $counter 2;
  195.         foreach ($data as $item) {
  196.             $sheet->getCell('A'.$counter)->setValue($item['user']['firstName'].' '.$item['user']['lastName']);
  197.             $sheet->getCell('B'.$counter)->setValue($item['client']['firstName'].' '.$item['client']['lastName']);
  198.             $sheet->getCell('C'.$counter)->setValue($item['car']['name']);
  199.             $sheet->getCell('D'.$counter)->setValue($item['car']['patent']);
  200.             $sheet->getCell('E'.$counter)->setValue($item['price']);
  201.             $sheet->getCell('F'.$counter)->setValue($item['moneyAdvance']);
  202.             $carSwap $item['carSwap'] ?? null;
  203.             $carSwapText $carSwap ? ($carSwap['name'].' - '.($carSwap['priceCurrencySale'] ?? '').($carSwap['priceSale'] ?? '')) : '';
  204.             $sheet->getCell('G'.$counter)->setValue($carSwapText);
  205.             $sheet->getCell('H'.$counter)->setValue($carSwap 'Sí' 'No');
  206.             $sheet->getCell('I'.$counter)->setValue($item['isDone'] == 'No' 'Sí');
  207.             $sheet->getCell('J'.$counter)->setValue($item['origin']);
  208.             if ($item['createdAt'] != null) {
  209.                 $sheet->getCell('K' $counter)->setValue($item['createdAt']->format('d-m-Y H:i:s'));
  210.             }
  211.             if ($item['updatedAt'] != null) {
  212.                 $sheet->getCell('L'.$counter)->setValue($item['updatedAt']->format('d-m-Y H:i:s'));
  213.             }
  214.             $counter ++;
  215.         }
  216.         // Increase row cursor after header write
  217.         //$sheet->fromArray($data,null, 'A2', true);
  218.         $writer = new Xlsx($spreadsheet);
  219.         // Create a Temporary file in the system
  220.         $fileName 'Compras.xlsx';
  221.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  222.         // Create the excel file in the tmp directory of the system
  223.         $writer->save($temp_file);
  224.         // Return the excel file as an attachment
  225.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  226.     }
  227.     /**
  228.      * @Route("/", name="car_buy_index", methods={"GET"})
  229.      */
  230.     public function index(CarBuyRepository $carBuyRepository): Response
  231.     {
  232.         $sellers $this->getDoctrine()->getManager()->getRepository(\App\Entity\User::class)->createQueryBuilder('u')
  233.             ->indexBy('u''u.id')
  234.             ->orderBy('u.firstName''ASC')
  235.             ->getQuery()
  236.             ->getArrayResult();
  237.         return $this->render('car_buy/index.html.twig', [
  238.             'car_buys' => $carBuyRepository->findAll([], ['isDoneDate' => 'ASC']),
  239.             'currentMenu' => 'car_buy',
  240.             'sellers' => $sellers,
  241.         ]);
  242.     }
  243.     /**
  244.      * @Route("/new", name="car_buy_new", methods={"GET","POST"})
  245.      */
  246.     public function new(Request $request): Response
  247.     {
  248.         $carBuy = new CarBuy();
  249.         $form $this->createForm(CarBuyType::class, $carBuy);
  250.         $form->handleRequest($request);
  251.         if ($form->isSubmitted() && $form->isValid()) {
  252.             if ($this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  253.                 $carBuy->SetUser($this->getUser());
  254.             }
  255.             $entityManager $this->getDoctrine()->getManager();
  256.             $entityManager->persist($carBuy);
  257.             $entityManager->flush();
  258.             /*---- Update car to buy [BEGIN] ----*/
  259.             $status $carBuy->getIsDone() ? 'entered' 'to enter';
  260.             $car $this->getDoctrine()->getManager()->getReference(\App\Entity\Car::class, $carBuy->getCar()->getId());
  261.             $car->setPricePurchase$carBuy->getPrice() );
  262.             $car->setPriceCurrencyPurchase$carBuy->getCurrency() );
  263.             $car->setStatus($status);
  264.             $this->getDoctrine()->getManager()->persist($car);
  265.             $this->getDoctrine()->getManager()->flush();
  266.             /*---- Update car to buy [END] ----*/
  267.             /*---- Update car to swap [BEGIN] ----*/
  268.             if ($carBuy->getCarSwap() != null) {
  269.                 $status $carBuy->getIsDone() ? 'swapped' 'to swap';
  270.                 $car $this->getDoctrine()->getManager()->getReference(\App\Entity\Car::class, $carBuy->getCarSwap()->getId());
  271.                 $car->setStatus($status);
  272.                 $this->getDoctrine()->getManager()->persist($car);
  273.                 $this->getDoctrine()->getManager()->flush();
  274.             }
  275.             /*---- Update car to swap [END] ----*/
  276.             return $this->redirectToRoute('car_buy_index', [], Response::HTTP_SEE_OTHER);
  277.         }
  278.         return $this->render('car_buy/new.html.twig', [
  279.             'car_buy' => $carBuy,
  280.             'form' => $form->createView(),
  281.             'currentMenu' => 'car_buy',
  282.         ]);
  283.     }
  284.     /**
  285.      * @Route("/{id}", name="car_buy_show", methods={"GET"})
  286.      */
  287.     public function show(CarBuy $carBuy): Response
  288.     {
  289.         return $this->render('car_buy/show.html.twig', [
  290.             'car_buy' => $carBuy,
  291.             'currentMenu' => 'car_buy',
  292.         ]);
  293.     }
  294.     /**
  295.      * @Route("/{id}/modal", name="car_buy_show_modal", methods={"GET"})
  296.      */
  297.     public function showModal(CarBuy $carBuy): Response
  298.     {
  299.         return $this->render('car_buy/show_modal.html.twig', [
  300.             'car_buy' => $carBuy,
  301.             'currentMenu' => 'car_buy',
  302.         ]);
  303.     }
  304.     /**
  305.      * @Route("/{id}/edit", name="car_buy_edit", methods={"GET","POST"})
  306.      */
  307.     public function edit(Request $requestCarBuy $carBuy): Response
  308.     {
  309.         if ($carBuy->getIsDone() && $this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  310.             return $this->render('messages/no_edit_record.html.twig', [
  311.                 'currentMenu' => 'car_buy',
  312.             ]);
  313.         }
  314.         $options['edit'] = true;
  315.         $options['carSwapId'] = $carBuy->getCarSwap() != null $carBuy->getCarSwap()->getId() : 0;
  316.         $oldEntity = clone $carBuy// save old entity
  317.         $form $this->createForm(CarBuyType::class, $carBuy$options);
  318.         $form->handleRequest($request);
  319.         if ($form->isSubmitted() && $form->isValid()) {
  320.             if ($this->getUser()->getRoles()[0] != 'ROLE_ADMIN') {
  321.                 $carBuy->SetUser($this->getUser());
  322.             }
  323.             $this->getDoctrine()->getManager()->flush();
  324.             /*---- Update car to buy [BEGIN] ----*/
  325.             $status $carBuy->getIsDone() ? 'entered' 'to enter';
  326.             $car $this->getDoctrine()->getManager()->getReference(\App\Entity\Car::class, $carBuy->getCar()->getId());
  327.             $car->setPricePurchase$carBuy->getPrice() );
  328.             $car->setPriceCurrencyPurchase$carBuy->getCurrency() );
  329.             $car->setStatus($status);
  330.             $this->getDoctrine()->getManager()->persist($car);
  331.             $this->getDoctrine()->getManager()->flush();
  332.             /*---- Update car to buy [END] ----*/
  333.             /*---- Update car to swap [BEGIN] ----*/
  334.             if ($carBuy->getCarSwap() != null) {
  335.                 if ($oldEntity->getCarSwap() != null && $oldEntity->getCarSwap()->getId() != $carBuy->getCarSwap()->getId()) {
  336.                     $car $this->getDoctrine()->getManager()->getReference(\App\Entity\Car::class, $oldEntity->getCarSwap()->getId());
  337.                     $car->setStatus('entered');
  338.                     $this->getDoctrine()->getManager()->persist($car);
  339.                     $this->getDoctrine()->getManager()->flush();
  340.                 }
  341.                 $status $carBuy->getIsDone() ? 'swapped' 'to swap';
  342.                 $car $this->getDoctrine()->getManager()->getReference(\App\Entity\Car::class, $carBuy->getCarSwap()->getId());
  343.                 $car->setStatus($status);
  344.                 $this->getDoctrine()->getManager()->persist($car);
  345.                 $this->getDoctrine()->getManager()->flush();
  346.             }
  347.             /*---- Update car to swap [END] ----*/
  348.             return $this->redirectToRoute('car_buy_index', [], Response::HTTP_SEE_OTHER);
  349.         }
  350.         return $this->render('car_buy/edit.html.twig', [
  351.             'car_buy' => $carBuy,
  352.             'form' => $form->createView(),
  353.             'currentMenu' => 'car_buy',
  354.         ]);
  355.     }
  356.     /**
  357.      * @Route("/{id}", name="car_buy_delete", methods={"POST"})
  358.      */
  359.     public function delete(Request $requestCarBuy $carBuy): Response
  360.     {
  361.         if ($this->isCsrfTokenValid('delete'.$carBuy->getId(), $request->request->get('_token'))) {
  362.             $entityManager $this->getDoctrine()->getManager();
  363.             $entityManager->remove($carBuy);
  364.             $entityManager->flush();
  365.         }
  366.         return $this->redirectToRoute('car_buy_index', [], Response::HTTP_SEE_OTHER);
  367.     }
  368.     /**
  369.      * @Route("/{id}/delete", name="car_buy_delete_ra", methods={"GET"})
  370.      */
  371.     public function deleteRa(Request $request): Response
  372.     {
  373.         $entityManager $this->getDoctrine()->getManager();
  374.         $user $entityManager->getReference(\App\Entity\CarBuy::class, $request->get('id'));
  375.         $entityManager->remove($user);
  376.         $entityManager->flush();
  377.         return $this->redirectToRoute('car_buy_index', [], Response::HTTP_SEE_OTHER);
  378.     }
  379. }