src/Controller/ContratoAdministrativoController.php line 234

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ContratoAdministrativo;
  4. use App\Entity\ContratoAdministrativoDocumento;
  5. use App\Form\ContratoAdministrativoType;
  6. use App\Repository\ContratoAdministrativoRepository;
  7. use App\Repository\ContratoAdministrativoDocumentoRepository;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. #[Route('/contrato/administrativo')]
  14. class ContratoAdministrativoController extends AbstractController {
  15.     /**
  16.      * @IsGranted("ROLE_ADMIN")
  17.      */
  18.     #[Route('/'name'app_contrato_administrativo_index'methods: ['GET'])]
  19.     public function index(ContratoAdministrativoRepository $contratoAdministrativoRepositoryRequest $request): Response {
  20.         $filter['tipo'] = $request->get('tipo') ?: '';
  21.         $filter['descricao'] = $request->get('descricao') ?: '';
  22.         $filter['pagina'] = $request->get('pagina') ?: 1;
  23.         $filter['anterior'] = $this->verifica('anterior', ($filter['pagina']));
  24.         $filter['primeira'] = 1;
  25.         $filter['total_registros'] = $contratoAdministrativoRepository->filterGridTotal($filter);
  26.         $filter['page'] = $request->get('page') ?: 10;
  27.         $filter['ultima'] = $this->verifica('ultima'$filter['total_registros'], $filter['page']);
  28.         $filter['proxima'] = $this->verifica('proxima', ($filter['pagina']), $filter['ultima']);
  29.         $filter['dataInicial'] = '';
  30.         $filter['dataFinal'] = '';
  31.         return $this->render('contrato_administrativo/index.html.twig', [
  32.                     'filtro' => $filter,
  33.                     'lista' => $contratoAdministrativoRepository->filterGrid($filter),
  34.         ]);
  35.     }
  36.     /**
  37.      * @IsGranted("ROLE_ADMIN")
  38.      */
  39.     #[Route('/new'name'app_contrato_administrativo_new'methods: ['GET''POST'])]
  40.     public function new(Request $requestContratoAdministrativoRepository $contratoAdministrativoRepository): Response {
  41.         $nav['dados'] = 'show active';
  42.         $nav['arquivos'] = '';
  43.         $contratoAdministrativo = new ContratoAdministrativo();
  44.         $form $this->createForm(ContratoAdministrativoType::class, $contratoAdministrativo);
  45.         $form->handleRequest($request);
  46.         if ($form->isSubmitted() && $form->isValid()) {
  47.             $contratoAdministrativoRepository->save($contratoAdministrativotrue);
  48.             return $this->redirectToRoute('app_contrato_administrativo_index', [], Response::HTTP_SEE_OTHER);
  49.         }
  50.         return $this->renderForm('contrato_administrativo/new.html.twig', [
  51.                     'contrato_administrativo' => $contratoAdministrativo,
  52.                     'form' => $form,
  53.                     'nav' => $nav
  54.         ]);
  55.     }
  56.     /**
  57.      * @IsGranted("ROLE_ADMIN")
  58.      */
  59.     #[Route('/arquivo/upload'name'app_contrato_administrativo_arquivo'methods: ['POST'])]
  60.     public function arquivo(Request $requestContratoAdministrativoRepository $em\App\Repository\ContratoAdministrativoDocumentoRepository $documento): Response {
  61.         $contrato $em->find($request->get('contrato'));
  62.         if ($contrato) {
  63.             $originalFilename $_FILES['arquivo']['name'];
  64.             $extensao pathinfo($originalFilename);
  65.             $fileName uniqid() . '.' $extensao['extension'];
  66.             $entity = new ContratoAdministrativoDocumento();
  67.             $entity->setDescricao($request->get('descricao'));
  68.             $entity->setContratoAdministrativo($contrato);
  69.             $entity->setDocumento($fileName);
  70.             $uploaddir 'arquivos/contrato_administrativo/';
  71.             $uploadfile $uploaddir $fileName;
  72.             if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)) {
  73.                 $documento->save($entitytrue);
  74.                 return $this->redirectToRoute('app_convenio_edit', ['id' => $contrato->getId(), 'nav' => 'arquivos'], Response::HTTP_SEE_OTHER);
  75.             } else {
  76.                 echo "Não foi possível realizar o upload do arquivo";
  77.                 die();
  78.             }
  79.         }
  80.     }
  81.     /**
  82.      * @IsGranted("ROLE_ADMIN")
  83.      */
  84.     #[Route('/{id}/edit'name'app_contrato_administrativo_edit'methods: ['GET''POST'])]
  85.     public function edit(Request $requestContratoAdministrativo $contratoAdministrativoContratoAdministrativoRepository $contratoAdministrativoRepository): Response {
  86.         $form $this->createForm(ContratoAdministrativoType::class, $contratoAdministrativo);
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             $contratoAdministrativoRepository->save($contratoAdministrativotrue);
  90.             return $this->redirectToRoute('app_contrato_administrativo_index', [], Response::HTTP_SEE_OTHER);
  91.         }
  92.         if ($request->get('nav')) {
  93.             if ($request->get('nav') == 'arquivos') {
  94.                 $nav['dados'] = '';
  95.                 $nav['arquivos'] = 'show active';
  96.             }
  97.         } else {
  98.             $nav['dados'] = 'show active';
  99.             $nav['arquivos'] = '';
  100.         }
  101.         return $this->renderForm('contrato_administrativo/edit.html.twig', [
  102.                     'contrato_administrativo' => $contratoAdministrativo,
  103.                     'form' => $form,
  104.                     'nav' => $nav,
  105.         ]);
  106.     }
  107.         /**
  108.      * @IsGranted("ROLE_ADMIN")
  109.      */   
  110.     #[Route('/delete/documento/{id}'name'app_convenio_documento_delete'methods: ['GET'])]
  111.     public function deleteDocumento(Request $requestContratoAdministrativoDocumento $documentoContratoAdministrativoDocumentoRepository $documentoRepository): Response {
  112.         
  113.         if ($documento) {
  114.             $contrato $documento->getContratoAdministrativo();
  115.             $documentoRepository->remove($documentotrue);
  116.             $form $this->createForm(ConvenioType::class, $contrato);
  117.             $form->handleRequest($request);
  118.             $nav['dados'] = '';
  119.             $nav['arquivos'] = 'show active';
  120.             $this->addFlash('success'"DOCUMENTO EXCLUIDO COM SUCESSO.");
  121.         }
  122.         return $this->renderForm('convenio/edit.html.twig', [
  123.                     'convenio' => $contrato,
  124.                     'form' => $form,
  125.                     'nav' => $nav
  126.         ]);
  127.         //return $this->redirectToRoute('app_subvencao_social_e_index', [], Response::HTTP_SEE_OTHER);
  128.     }
  129.     
  130.     /**
  131.      * @IsGranted("ROLE_ADMIN")
  132.      */
  133.     #[Route('/delete/{id}'name'app_contrato_administrativo_delete'methods: ['GET'])]
  134.     public function delete(Request $request,ContratoAdministrativoRepository $em): Response {
  135.         if ($entity $em->find($request->get('id'))) {
  136.             try {
  137.                 $em->remove($entitytrue);
  138.                 $this->addFlash('success'"REGISTRO EXCLUIDO COM SUCESSO.");
  139.                 return $this->redirectToRoute('app_contrato_administrativo_index', [], Response::HTTP_SEE_OTHER);
  140.             } catch (\Exception $e) {
  141.                 $this->addFlash('errors'"NÃO FOI POSSÍVEL EXCLUIR O REGISTRO. VERIFIQUE SE EXISTE ALGUM DOCUMENTO VINCULADO.");
  142.                 return $this->redirectToRoute('app_contrato_administrativo_index', [], Response::HTTP_SEE_OTHER);
  143.             }
  144.         }else{
  145.                 $this->addFlash('errors'"NÃO FOI POSSÍVEL LOCALIZAR O REGISTRO INFORMADO.");
  146.                 return $this->redirectToRoute('app_contrato_administrativo_index', [], Response::HTTP_SEE_OTHER);            
  147.         }        
  148.        
  149.     }
  150.     #[Route('/contratos'name'app_contrato_administrativo_publico'methods: ['GET'])]
  151.     public function contrato(ContratoAdministrativoRepository $contratoAdministrativoRepositoryRequest $request): Response {
  152.         $filter['ano'] = $request->get('ano') ?: date('Y');
  153.         //$filter['mes'] = $request->get('mes')?: date('m');        
  154.         $filter['tipo'] = $request->get('tipo') ?: '';
  155.         $filter['descricao'] = $request->get('descricao') ?: '';
  156.         $filter['pagina'] = $request->get('pagina') ?: 1;
  157.         $filter['anterior'] = $this->verifica('anterior', ($filter['pagina']));
  158.         $filter['primeira'] = 1;
  159.         $filter['total_registros'] = $contratoAdministrativoRepository->filterGridTotal($filter);
  160.         $filter['page'] = $request->get('page') ?: 10;
  161.         $filter['ultima'] = $this->verifica('ultima'$filter['total_registros'], $filter['page']);
  162.         $filter['proxima'] = $this->verifica('proxima', ($filter['pagina']), $filter['ultima']);
  163.         $filter['dataInicial'] = '';
  164.         $filter['dataFinal'] = '';
  165.         if ($request->get('impressao')) {
  166.             $filter['page'] = 'all';
  167.             if ($request->get('pdf')) {
  168.                 $html $this->renderView('contrato_administrativo/impressao_pdf.html.twig', [
  169.                     'filtro' => $filter,
  170.                     'lista' => $contratoAdministrativoRepository->filterGrid($filter),
  171.                 ]);
  172.                 $dompdf = new Dompdf();
  173.                 $dompdf->setPaper('A4''landscape');
  174.                 $dompdf->set_option("isPhpEnabled"true);
  175.                 $options $dompdf->getOptions();
  176.                 $options->setDefaultFont('Courier');
  177.                 $dompdf->setOptions($options);
  178.                 $dompdf->loadHtml($html);
  179.                 $dompdf->render();
  180.                 return new Response(
  181.                         $dompdf->stream('resume', ["Attachment" => false]),
  182.                         Response::HTTP_OK,
  183.                         ['Content-Type' => 'application/pdf']
  184.                 );
  185.             } elseif ($request->get('excel')) {
  186.                 $lista $contratoAdministrativoRepository->filterGrid($filter);
  187.                 $titulos = array("Número""Objeto""Especie""Exposição""Valor""Contratado""Tipo");
  188.                 $rows[] = implode(';'$titulos);
  189.                 foreach ($lista as $value) {
  190.                     $data = array($value->getAno(), $value->getNumero(), $value->getObjeto(), $value->getEspecie(), $value->getExposicacao(), $value->getValor(), $value->getContratado(), $value->getContratadoTipo());
  191.                     $rows[] = implode(';'$data);
  192.                 }
  193.                 $content implode("\n"$rows);
  194.                 $response = new Response($content);
  195.                 $response->headers->set('Content-Type''text/csv');
  196.                 return $response;
  197.             } else {
  198.                 return $this->render('contrato_administrativo/impressao.html.twig', [
  199.                             'filtro' => $filter,
  200.                             'lista' => $contratoAdministrativoRepository->filterGrid($filter),
  201.                 ]);
  202.             }
  203.         }
  204.         return $this->render('contrato_administrativo/contratos.html.twig', [
  205.                     'filtro' => $filter,
  206.                     'lista' => $contratoAdministrativoRepository->filterGrid($filter),
  207.         ]);
  208.     }
  209.     #[Route('/ano'name'app_contrato_administrativo_publico_ano'methods: ['GET'])]
  210.     public function ano(ContratoAdministrativoRepository $contratoAdministrativoRepositoryRequest $request): Response {
  211.         $lista $contratoAdministrativoRepository->getAnos();
  212.         return $this->render('contrato_administrativo/ano.html.twig', [
  213.                     'itens' => $lista,
  214.         ]);
  215.     }
  216.     private function verifica($str$pagina$page null) {
  217.         if ($str == "anterior") {
  218.             if ($pagina 1) {
  219.                 return 1;
  220.             }
  221.         }
  222.         if ($str == "proxima") {
  223.             if ($pagina $page) {
  224.                 return $page;
  225.             }
  226.             return $pagina;
  227.         }
  228.         if ($str == "ultima") {
  229.             if ($page == "all") {
  230.                 $page $pagina;
  231.             }
  232.             $valor intdiv($pagina$page);
  233.             if (($pagina $page) > 0) {
  234.                 return ++$valor;
  235.             } else {
  236.                 return $valor;
  237.             }
  238.         }
  239.     }
  240. }