src/Admin/BoletimMedicaoAdmin.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\BoletimMedicao;
  5. use App\Entity\ServicoBoletimMedicao;
  6. use App\Enums\StatusBoletimEnum;
  7. use App\Enums\StatusContaFinanceiro;
  8. use App\Form\Type\AlertType;
  9. use Doctrine\ORM\Query\Expr\Base;
  10. use Sonata\AdminBundle\Admin\AbstractAdmin;
  11. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  12. use Sonata\AdminBundle\Datagrid\ListMapper;
  13. use Sonata\AdminBundle\Exception\ModelManagerException;
  14. use Sonata\AdminBundle\Form\FormMapper;
  15. use Sonata\AdminBundle\Form\Type\ModelType;
  16. use Sonata\AdminBundle\Route\RouteCollection;
  17. use Sonata\AdminBundle\Show\ShowMapper;
  18. use Sonata\Form\Type\CollectionType;
  19. use Sonata\Form\Type\DateTimePickerType;
  20. use Sonata\Form\Validator\ErrorElement;
  21. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  22. use Symfony\Component\Form\Extension\Core\Type\MoneyType;
  23. use Symfony\Component\Form\Extension\Core\Type\TextType;
  24. use function Sodium\add;
  25. final class BoletimMedicaoAdmin extends BaseAdmin
  26. {
  27.     protected $datagridValues = [
  28.         '_page'         => 1,
  29.         '_sort_order'   => 'DESC',
  30.         '_sort_by'      => 'createdAt',
  31.         '_per_page'     => 1000
  32.     ];
  33.     public function getTemplate($name)
  34.     {
  35.         if ($name === 'edit') {
  36.             return 'BoletinsMedicao/edit.html.twig';
  37.         }
  38.         return parent::getTemplate($name);
  39.     }
  40.     protected function configureRoutes(RouteCollection $collection)
  41.     {
  42.         $collection->add('boletimPdf');
  43.         $collection->add('boletimPdfEmail');
  44.         $collection->add('gerarFianceiro');
  45.         $collection->add('alteraStatusBm');
  46.     }
  47.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  48.     {
  49.         $datagridMapper
  50.             ->add('id')
  51.             ->add('numero')
  52.             ->add('os.proposta.numero'null, ['label'=>'Número Proposta'])
  53.             ->add('status','doctrine_orm_callback',  array(
  54.                 'label' => 'Status',
  55.                 'callback' => function($queryBuilder$alias$field$value) {
  56.                     if (!$value['value']) {
  57.                         return;
  58.                     }
  59.                     $queryBuilder->andWhere($alias.'.status = :status');
  60.                     $queryBuilder->setParameter('status',$value['value']);
  61.                     return true;
  62.                 }
  63.             ), ChoiceType::class, array(
  64.                 'choices' => StatusBoletimEnum::getAssociatedValues()
  65.             ))
  66.             ->add('os','doctrine_orm_callback',[
  67.                 'label'=>'Cliente',
  68.                 'callback'   => array($this'filterBMCliente'),
  69.                 //'field_type' => 'text',
  70.             ])
  71.             ->add('createdAt'null,['label'=>'Data de Cadastro'])
  72.             ;
  73.     }
  74.     // Filtro de condomínio por logradouro
  75.     public function filterBMCliente($queryBuilder$alias$field$value)
  76.     {
  77.         if (!$value['value']) {
  78.             return;
  79.         }
  80.         $value mb_strtolower($value['value']);
  81.         $queryBuilder
  82.             ->join("$alias.os","sos")
  83.             ->join("sos.proposta","prop")
  84.             ->join("prop.cliente","cli")
  85.             //->andWhere("UNACCENT(LOWER(cli.razaoSocial)) LIKE UNACCENT(:nome)" )
  86.             ->andWhere("LOWER(cli.razaoSocial) LIKE :nome" )
  87.             ->setParameter('nome'"%$value%");
  88.         return true;
  89.     }
  90.     function preUpdate($object)
  91.     {
  92.         parent::preUpdate($object); // TODO: Change the autogenerated stub
  93.     }
  94.     public function prePersist($object)
  95.     {
  96.         $object->setCadastradoPor($this->getUserLogado());
  97.         parent::prePersist($object); // TODO: Change the autogenerated stub
  98.     }
  99. //    function validate(ErrorElement $errorElement, $object)
  100. //    {
  101. //        /** @var BoletimMedicao $object */
  102. //        parent::validate($errorElement, $object); // TODO: Change the autogenerated stub
  103. //
  104. //        if($object){
  105. //            if($object->getAprovadoEm() instanceof \DateTime){
  106. //                $errorElement->with('numero')->addViolation('Este boletim de medição não pode ser modificado pois já foi aprovado e encaminhado para o departamento financeiro.')->end();
  107. //            }
  108. //        }
  109. //
  110. //    }
  111.     protected function configureListFields(ListMapper $listMapper): void
  112.     {
  113.         $listMapper
  114.             ->add('status'null, ['label'=>'Status''template'=>'BoletinsMedicao/status_list.html.twig'])
  115.             //->add('status', null, ['label'=>'Status','template'=>'BoletinsMedicao/status_sinalizador_list.html.twig'])
  116.             ->add('numero'null, ['label'=>'Número BM'])
  117.             ->addIdentifier('os.proposta.numero'null, ['label'=>'Nº Proposta''template'=>'BoletinsMedicao/numero_proposta.html.twig'])
  118.             ->addIdentifier('os.proposta.cliente.razaoSocial'null, ['label'=>'Cliente'])
  119.             ->add('createdAt'null, ['label'=>'Data Cadastro'])
  120.             //->add('servicos', null, ['label'=>'Qtd Serviços', 'template'=>'BoletinsMedicao/servicos_link.html.twig'])
  121.             ->add('_action'null, [
  122.                 'actions' => [
  123.                     //'show' => [],
  124.                     'edit' => [],
  125.                     'delete' => [],
  126.                     'boletimPdf' => [
  127.                         'template' => 'BoletinsMedicao/list__action_pdfBoletim.html.twig',
  128.                     ],
  129.                     'gerarFianceiro' => [
  130.                         'template' => 'BoletinsMedicao/list__action_gerarFianceiro.html.twig',
  131.                     ]
  132.                 ],
  133.             ]);
  134.     }
  135.     protected function configureFormFields(FormMapper $formMapper): void
  136.     {
  137.         $bo $this->getSubject();
  138. //        if($bo instanceof BoletimMedicao){
  139. //            if($bo->getAprovadoEm() instanceof \DateTime) {
  140. //                $formMapper->add('alert',AlertType::class, ['mapped'=>false,'data'=>'Esse boletim de medição já foi aprovado e já foi passado para o financeiro','label'=>false,'attr'=>['class'=>'hide_label']]);
  141. //            }
  142. //        }
  143.         $formMapper
  144.             ->add('os'ModelType::class, [
  145.                 'placeholder' => '-- Selecione --',
  146.                 'label' => 'Ordem de Serviço',
  147.                 'disabled' => false,
  148.                 'required' => true,
  149.                 'expanded' => false,
  150.                 'multiple' => false,
  151.                 'btn_add' => false,
  152.             ])
  153.             ->add('numero',null, ['label'=>'Número','attr'=>['readonly'=>false]])
  154.             ->add('status'ChoiceType::class, [
  155.                 'choices' => StatusBoletimEnum::getAssociatedValues()
  156.             ])
  157.             ->add('cobrarART',null, ['label'=>'Cobrar ART'])
  158.             ->add('isCobraRelatorioTecnico'null, ['label'=>"Cobrar Relatório Técnico"])
  159.             ->add('percentualRelatorioTecnico'MoneyType::class, [
  160.                 'label' => 'Percentual Relatório Técnico',
  161.                 'currency' => 'BRL',
  162.                 'grouping' => true,
  163.                 'required' => false,
  164.                 'help'=>'* Este valor será usado somente nessa proposta.',
  165.                 'attr' => ['class' => 'usePercentPromocaoValor maskMoney'],
  166.             ])
  167.             ->add('valorDesconto'MoneyType::class, [
  168.                 'label' => 'Valor adicional para desconto',
  169.                 'currency' => 'BRL',
  170.                 'grouping' => true,
  171.                 'required' => false,
  172.                 'help'      => 'Pode ser usando para ISS, por exemplo. Será descontado do total da medição, com os impostos.',
  173.                 'attr' => ['class' => 'maskMoney'],
  174.             ])
  175.             ->add('labelValorAdicionalDesconto',null, ['label'=>'Título do valor adicional de desconto'])
  176.             ->add('notas'null, ['label'=>"Notas/Observações",'attr'=>['style'=>"height:200px"'class'=>'editorHtml']])
  177.             ->add('destinatarioEmail'null, ['label'=>"Email destinatário"])
  178.             //->add('aprovadoEm', DateTimePickerType::class,['dp_use_seconds'=>false, 'dp_use_current'=> true, 'format'=>"DD/MM/YYYY HH:mm", 'label'=>'Data da Aprovação', 'required'=>false])
  179.             ;
  180.     }
  181.     protected function configureShowFields(ShowMapper $showMapper): void
  182.     {
  183.         $showMapper
  184.             ->add('id')
  185.             ->add('createdAt')
  186.             ->add('updatedAt')
  187.             ;
  188.     }
  189.     function postPersist($object)
  190.     {
  191.         /** @var BoletimMedicao $object */
  192.         parent::postPersist($object); // TODO: Change the autogenerated stub
  193.         $container $this->getConfigurationPool()->getContainer();
  194.         $em $container->get('doctrine.orm.entity_manager');
  195.         // Adicionar os serviços da proposta da os no BM
  196.         foreach ($object->getOs()->getProposta()->getServicos() as $servico) {
  197.             $quantidade = ($servico->getQuantidade()) ? $servico->getQuantidade() : 1;
  198.             $servicoBoletim = (new ServicoBoletimMedicao())
  199.                 ->setServico($servico)
  200.                 ->setProposta($object->getOs()->getProposta())
  201.                 ->setBoletim($object)
  202.                 ->setQuantidade($quantidade);
  203.             $em->persist($servicoBoletim);
  204.             $em->flush();
  205.             $object->addServico($servicoBoletim);
  206.         }
  207.     }
  208.     function preRemove($object)
  209.     {
  210.         //parent::preRemove($object); // TODO: Change the autogenerated stub
  211.         //$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error','Not delete super user');
  212.         //throw new ModelManagerException();
  213.     }
  214. }