src/Admin/RelatorioTecnicoAdmin.php line 24

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\ImagemRelatorio;
  5. use App\Entity\RelatorioTecnico;
  6. use App\Enums\StatusOrdemServicoEnum;
  7. use App\Form\Type\FotosType;
  8. use App\Model\ImageCacheDescriber;
  9. use Sonata\AdminBundle\Admin\AbstractAdmin;
  10. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  11. use Sonata\AdminBundle\Datagrid\ListMapper;
  12. use Sonata\AdminBundle\Form\FormMapper;
  13. use Sonata\AdminBundle\Form\Type\ModelType;
  14. use Sonata\AdminBundle\Route\RouteCollection;
  15. use Sonata\AdminBundle\Show\ShowMapper;
  16. use Sonata\Form\Type\CollectionType;
  17. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  18. use Symfony\Component\Form\Extension\Core\Type\FileType;
  19. use Symfony\Component\Validator\Constraints as Assert;
  20. final class RelatorioTecnicoAdmin extends BaseAdmin
  21. {
  22.     protected $datagridValues = [
  23.         '_page'         => 1,
  24.         '_sort_order'   => 'DESC',
  25.         '_sort_by'      => 'createdAt',
  26.         '_per_page'     => 1000
  27.     ];
  28.     
  29.     public function __construct($code$class$baseControllerName)
  30.     {
  31.         parent::__construct($code$class$baseControllerName);
  32.         $this->imagensUpload = [
  33.             new ImageCacheDescriber('logoOriginal''logo''logoFile''thumb_400px'),
  34.         ];
  35.     }
  36.     protected function configureRoutes(RouteCollection $collection)
  37.     {
  38.         $collection->add('relatorioPdf');
  39.         $collection->add('relatorioPdfEmail');
  40.         $collection->add('uploadImage');
  41.         $collection->add('deleteImage');
  42.         $collection->add('updateImage');
  43.         $collection->add('udpateAcessoRelatorioCliente');
  44.         $collection->add('openpdf');
  45.     }
  46.     public function postRemove($object)
  47.     {
  48.         parent::postRemove($object); // TODO: Change the autogenerated stub
  49.         if($object->getRelatorioAnexoFile()){
  50.             if (file_exists($object->getRelatorioAnexoFile())) {
  51.                 @unlink($object->getRelatorioAnexo());
  52.             }
  53.         }
  54.     }
  55.     public function prePersist($object)
  56.     {
  57.         ini_set('upload_max_filesize''10M');
  58.         /** @var RelatorioTecnico $object */
  59.         parent::prePersist($object); // TODO: Change the autogenerated stub
  60.         $object->setStatus('gerado');
  61.         $object->setCadastradoPor($this->getUserLogado());
  62.         if($object->getIsFinalizado()){
  63.             $object->setFinalizadoEm(new \DateTime('now'));
  64.             $object->getOrdemServico()->setStatus(StatusOrdemServicoEnum::CONCLUIDA);
  65.         }
  66.         if($object->getRelatorioAnexoFile()){
  67.             $this->manageFilesUploadRelatorioAnexo($object);
  68.         }
  69.     }
  70.     public function preUpdate($object)
  71.     {
  72. //        if($object->getIsFinalizado()===TRUE){
  73. //            exit('Este relatorio nao pode ser editado porque ja foi finalizado!');
  74. //        }
  75.         parent::preUpdate($object); // TODO: Change the autogenerated stub
  76.         if($object->getIsFinalizado()){
  77.             $object->setFinalizadoEm(new \DateTime('now'));
  78.             $object->getOrdemServico()->setStatus(StatusOrdemServicoEnum::CONCLUIDA);
  79.         }
  80.         if($object->getRelatorioAnexoFile()){
  81.             if($object->getRelatorioAnexo()){
  82.                 if (file_exists($object->getRelatorioAnexo())) {
  83.                     @unlink($object->getRelatorioAnexo());
  84.                 }
  85.             }
  86.             $this->manageFilesUploadRelatorioAnexo($object);
  87.         }
  88.     }
  89.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  90.     {
  91.         $datagridMapper
  92.             ->add('ordemServico.proposta.numero'null, ['label'=>'Número Ordem de Serviço'])
  93.             ->add('ordemServico.proposta.anoProposta'null, ['label'=>'Ano Ordem de Serviço'])
  94.             ->add('cliente','doctrine_orm_callback',[
  95.                 'label'=>'Cliente Razao Social',
  96.                 'callback'   => array($this'filterCliente'),
  97.                 //'field_type' => 'text',
  98.             ])
  99.             ->add('createdAt'null, ['label'=>'Data de Cadastro'])
  100.         ;
  101.     }
  102.     public function filterCliente($queryBuilder$alias$field$value)
  103.     {
  104.         if (!$value['value']) {
  105.             return;
  106.         }
  107.         $value mb_strtolower($value['value']);
  108.         $queryBuilder
  109.             ->leftJoin("$alias.ordemServico","os")
  110.             ->leftJoin("os.proposta","prop")
  111.             ->leftJoin("prop.cliente","cli")
  112.             //->andWhere("UNACCENT(LOWER(cli.razaoSocial)) LIKE UNACCENT(:nome)" )
  113.             ->andWhere("LOWER(cli.razaoSocial) LIKE :nome" )
  114.             ->setParameter('nome'"%$value%");
  115.         return true;
  116.     }
  117.     protected function configureListFields(ListMapper $listMapper): void
  118.     {
  119.         $listMapper
  120.             ->add('ordemServico.proposta.numeroFormatado'null, ['label'=>'OS'])
  121.             ->add('ordemServico.proposta.cliente.razaoSocial'null, ['label'=>'Cliente'])
  122.             ->add('createdAt'null, ['label'=>'Data de Cadastro'])
  123.             ->add('_action'null, [
  124.                 'actions' => [
  125.                     //'show' => [],
  126.                     'edit' => [],
  127.                     'delete' => [],
  128.                     'relatorioPdf' => [
  129.                         'template' => 'RelatoriosTecnicos/list__action_pdfRelatorioTecnico.html.twig',
  130.                     ],
  131.                 ],
  132.             ]);
  133.     }
  134.     protected function configureFormFields(FormMapper $formMapper): void
  135.     {
  136.         /** @var RelatorioTecnico $relatorio */
  137.         $relatorio $this->getSubject();
  138.         $imgReq false;
  139.         $fileFieldOptions = [
  140.             'data_class' => null,
  141.             'required' => $imgReq,
  142.             'label' => 'Imagem do Resumo dos Resultados',
  143.         ];
  144.         $fileFieldOptionsRelatorioAnexo = [
  145.             'data_class' => null,
  146.             'required' => false,
  147.             'label' => 'Anexo de Relatório',
  148.             'help' => '',
  149.         ];
  150.         if (!is_null($relatorio) && $relatorio->getRelatorioAnexo() != '') {
  151.             $fileFieldOptionsRelatorioAnexo['help'] = '<a href="/'.$relatorio->getRelatorioAnexo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar</a>';
  152.         }
  153.         if (!is_null($relatorio) && $relatorio->getLogo() != '') {
  154.             $fileFieldOptions['help'] = '<img src="' $relatorio->getLogo() .
  155.                 '" class="admin-preview img-thumbnail" style="max-width:150px;max-height:250px;"/>';
  156.         }
  157.         $formMapper
  158.             ->add('ordemServico'ModelType::class, [
  159.                 'placeholder' => '-- Selecione --',
  160.                 'label' => 'Ordem de Serviço',
  161.                 'required' => true,
  162.                 'expanded' => false,
  163.                 'multiple' => false,
  164.             ])
  165.             ->add('numeroBm',null,['label'=>'Número do BM''required'=> true])
  166.             ->add('relatorioAnexoFile'FileType::class, [
  167.                 'constraints' => [new Assert\File([
  168.                     'mimeTypes' => [
  169.                         'application/pdf',
  170.                         'application/x-pdf'
  171.                     ],
  172.                     'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .pdf'
  173.                 ])],
  174.                 'label' => 'Anexo de Relatório',
  175.                 'help' => $fileFieldOptionsRelatorioAnexo['help'],
  176.                 'required' => false,
  177.             ])
  178.             ->add('logoFile'FileType::class, $fileFieldOptions)
  179.             ->add('responsavel',null,['label'=>'Engenheiro'])
  180.             ->add('laboratorista',null,['label'=>'Laboratorista'])
  181.             ->add('conclusao',null,['label'=>'Conclusão'])
  182.             ->add('isFinalizado',null,['label'=>'Relatório Final'])
  183.             
  184.             ->add('destinatarioNome'null, ['label'=>"Nome destinatário"])
  185.             ->add('destinatarioEmail'null, ['label'=>"Email destinatário"]);
  186.             if($relatorio instanceof RelatorioTecnico) {
  187.                 $formMapper->add('imagensrelatorio',FotosType::class, ['label'=>false]);
  188.             }
  189. //            ->add('imagensrelatorio', CollectionType::class, [
  190. //                'label' => 'Serviços Solicitados',
  191. //                'by_reference' => false,
  192. //            ], [
  193. //                'edit' => 'inline',
  194. //                'inline' => 'table',
  195. ////                'sortable' => 'posicao',
  196. //            ])
  197. //            ->add('status', ChoiceType::class, [
  198. //                'choices' => [
  199. //                    'Gerado' => 'gerado',
  200. //                    'Bloqueado' => 'bloqueado',
  201. //                    'Em Avaliação' => 'em_avaliacao',
  202. //                    'Cancelado' => 'cancelado',
  203. //                    'Enviado para o Cliente' => 'enviado_cliente'
  204. //                ]
  205. //            ])
  206.             ;
  207.     }
  208.     // 4 partes:
  209. //        ano:
  210. //        os:
  211. //        tres algarismo
  212.     protected function configureShowFields(ShowMapper $showMapper): void
  213.     {
  214.         $showMapper
  215.             ->add('id')
  216.             ->add('createdAt')
  217.             ->add('status')
  218.             ->add('enviadoParaClienteEm')
  219.             ;
  220.     }
  221.     /**
  222.      * @param RelatorioTecnico $obj
  223.      * @return RelatorioTecnico
  224.      */
  225.     private function manageFilesUploadRelatorioAnexo($obj)
  226.     {
  227.         $file $obj->getRelatorioAnexoFile();
  228.         $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  229.         $uploadPath "uploads/anexo-relatorios-tecnicos";
  230.         $file->move($uploadPath$nameFile);
  231.         $obj->setRelatorioAnexoOriginal($uploadPath "/" $filename);
  232.         $obj->setRelatorioAnexo($uploadPath "/" $filename);
  233.     }
  234. }