src/Admin/ClienteAdmin.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Admin\TabMenu\ModuloMaestrosTabMenuAdmin;
  5. use App\Entity\Cliente;
  6. use App\Enum\IdentificacionEnum;
  7. use App\Enum\IdiomaEnum;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Knp\Menu\ItemInterface;
  10. use Sonata\AdminBundle\Admin\AbstractAdmin;
  11. use Sonata\AdminBundle\Admin\AdminInterface;
  12. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  13. use Sonata\AdminBundle\Datagrid\ListMapper;
  14. use Sonata\AdminBundle\Form\FormMapper;
  15. use Sonata\AdminBundle\Show\ShowMapper;
  16. use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
  17. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  18. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  19. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  20. use Vich\UploaderBundle\Form\Type\VichFileType;
  21. use Vich\UploaderBundle\Form\Type\VichImageType;
  22. final class ClienteAdmin extends AbstractAdmin
  23. {
  24.     public function __construct(
  25.         $code,
  26.         $class,
  27.         $baseControllerName,
  28.         private ModuloMaestrosTabMenuAdmin $moduloMaestrosTabMenuAdmin,
  29.         private EntityManagerInterface $em
  30.     ) {
  31.         parent::__construct($code$class$baseControllerName);
  32.     }
  33.     protected function configureTabMenu(ItemInterface $menustring $action, ?AdminInterface $childAdmin null): void
  34.     {
  35.         $this->moduloMaestrosTabMenuAdmin->configureTabMenu($this$menu$action$childAdmin);
  36.         parent::configureTabMenu($menu$action$childAdmin);
  37.     }
  38.     protected function configureDatagridFilters(DatagridMapper $filter): void
  39.     {
  40.         if($this->getRequest()->get('nav_prometeo')) {
  41.             $this->getDatagrid()->setValue('_per_page'null$_ENV['REGISTROS_PER_PAGE_MODAL']);
  42.         }
  43.         $filter
  44.             ->add('busqueda'CallbackFilter::class, [
  45.                 'label' => false,
  46.                 'attr' => [
  47.                     'class' => 'filter-to-navbar-left filter-to-navbar',
  48.                     'data-order' => '1',
  49.                     'placeholder' => 'filter.placeholder.busqueda',
  50.                 ],
  51.                 'callback' => function($queryBuilder$alias$field$value)
  52.                 {
  53.                     if (!$value->hasValue())  return;
  54.                     $this->em->getRepository(Cliente::class)->cbFilter($queryBuilder$alias$field$value);
  55.                     return true;
  56.                 },
  57.             ])
  58.         ;
  59.     }
  60.     protected function configureListFields(ListMapper $list): void
  61.     {
  62.         $this->setTranslationDomain('clienteAdmin');
  63.         $parent $this->getRequest()->get('pcode');
  64.         $list
  65.             ->add('razonSocial'null, [
  66.                 'label' => 'list.cliente.label.razon_social',
  67.                 'identifier' => !$parent true false,
  68.                 'route' => [
  69.                     'name' => 'edit'
  70.                 ],
  71.                 'attr' => [
  72.                     'class' => 'save-field-db'
  73.                 ]
  74.             ])
  75.             ->add('identificacionTipo'null, [
  76.                 'label' => 'list.cliente.label.identificacion_tipo',
  77.                 'attr' => [
  78.                     'class' => 'save-field-db'
  79.                 ]
  80.             ])
  81.             ->add('identificacion'null, [
  82.                 'label' => 'list.cliente.label.identificacion',
  83.                 'attr' => [
  84.                     'class' => 'save-field-db'
  85.                 ]
  86.             ])
  87.             ->add('direccion'null, [
  88.                 'label' => 'list.cliente.label.direccion',
  89.                 'header_style' => 'display:none;',
  90.                 'attr' => [
  91.                     'class' => 'save-field-db hidden'
  92.                 ]
  93.             ])
  94.             ->add('cp'null, [
  95.                 'label' => 'list.cliente.label.cp',
  96.                 'header_style' => 'display:none;',
  97.                 'attr' => [
  98.                     'class' => 'save-field-db hidden'
  99.                 ]
  100.             ])
  101.             ->add('ciudad'null, [
  102.                 'label' => 'list.cliente.label.ciudad',
  103.                 //'header_style' => 'display:none;',
  104.                 'attr' => [
  105.                     'class' => 'save-field-db'
  106.                 ]
  107.             ])
  108.             ->add('region'null, [
  109.                 'label' => 'list.cliente.label.region',
  110.                 //'header_style' => 'display:none;',
  111.                 'attr' => [
  112.                     'class' => 'save-field-db'
  113.                 ]
  114.             ])
  115.             ->add('provincia.id'null, [
  116.                 'label' => 'list.cliente.label.provincia',
  117.                 'header_style' => 'display:none;',
  118.                 'attr' => [
  119.                     'class' => 'save-field-db hidden'
  120.                 ]
  121.             ])
  122.             ->add('ccaa.id'null, [
  123.                 'label' => 'list.cliente.label.ccaa',
  124.                 'header_style' => 'display:none;',
  125.                 'attr' => [
  126.                     'class' => 'save-field-db hidden'
  127.                 ]
  128.             ])
  129.             ->add('pais'null, [
  130.                 'label' => 'list.cliente.label.pais',
  131.                 //'header_style' => 'display:none;',
  132.                 'attr' => [
  133.                     'class' => 'save-field-db'
  134.                 ]
  135.             ])
  136.             ->add('telefono'null, [
  137.                 'label' => 'list.cliente.label.telefono',
  138.                 'header_style' => 'display:none;',
  139.                 'attr' => [
  140.                     'class' => 'save-field-db hidden'
  141.                 ]
  142.             ])
  143.             ->add('email'null, [
  144.                 'label' => 'list.cliente.label.email',
  145.                 'header_style' => 'display:none;',
  146.                 'attr' => [
  147.                     'class' => 'save-field-db hidden'
  148.                 ]
  149.             ])
  150.             ->add('entidadBancaria'null, [
  151.                 'label' => 'list.cliente.label.entidad_bancaria',
  152.                 'header_style' => 'display:none;',
  153.                 'attr' => [
  154.                     'class' => 'save-field-db hidden'
  155.                 ]
  156.             ])
  157.             ->add('iban'null, [
  158.                 'label' => 'list.cliente.label.iban',
  159.                 'header_style' => 'display:none;',
  160.                 'attr' => [
  161.                     'class' => 'save-field-db hidden'
  162.                 ]
  163.             ])
  164.             ->add('swift'null, [
  165.                 'label' => 'list.cliente.label.swift',
  166.                 'header_style' => 'display:none;',
  167.                 'attr' => [
  168.                     'class' => 'save-field-db hidden'
  169.                 ]
  170.             ])
  171.             ->add('identificacionFrontal'null, [
  172.                 'label' => 'list.cliente.label.identificacion_frontal',
  173.                 'header_style' => 'display:none;',
  174.                 'attr' => [
  175.                     'class' => 'save-field-db hidden'
  176.                 ]
  177.             ])
  178.             ->add('identificacionTrasera'null, [
  179.                 'label' => 'list.cliente.label.identificacion_trasera',
  180.                 'header_style' => 'display:none;',
  181.                 'attr' => [
  182.                     'class' => 'save-field-db hidden'
  183.                 ]
  184.             ])
  185.             ->add('idioma'null, [
  186.                 'label' => 'list.cliente.label.idioma',
  187.                 'attr' => [
  188.                     'class' => 'save-field-db'
  189.                 ]
  190.             ])
  191. //            ->add(ListMapper::NAME_ACTIONS, null, [
  192. //                'actions' => [
  193. //                    'show' => [],
  194. //                    'edit' => [],
  195. //                    'delete' => [],
  196. //                ],
  197. //            ])
  198.         ;
  199.     }
  200.     protected function configureFormFields(FormMapper $form): void
  201.     {
  202.         $this->setTranslationDomain('clienteAdmin');
  203.         $form
  204.             ->add('razonSocial'null, [
  205.                 'label' => false,
  206.                 'disabled' => $this->isDisabled(),
  207.                 'attr' => [
  208.                     'placeholder' => 'form.cliente.placeholder.razon_social',
  209.                     'data-field' => 'razonSocial',
  210.                     'class' => 'save-field-db',
  211.                 ],
  212.                 'translation_domain' => 'clienteAdmin',
  213.             ])
  214.             ->add('alias'null, [
  215.                 'label' => false,
  216.                 'disabled' => $this->isDisabled(),
  217.                 'attr' => [
  218.                     'placeholder' => 'form.cliente.placeholder.alias',
  219.                 ],
  220.                 'translation_domain' => 'clienteAdmin',
  221.             ])
  222.             ->add('identificacionTipo'ChoiceType::class, [
  223.                 'label' => false,
  224.                 'disabled' => $this->isDisabled(),
  225.                 'attr' => [
  226.                     'data-field' => 'identificacionTipo',
  227.                     'class' => 'save-field-db',
  228.                 ],
  229.                 'choices' => array_flip(IdentificacionEnum::getIdentificaciones()),
  230. //                'choice_value' => function($choice)
  231. //                {
  232. //                    return $choice;
  233. //                },
  234. //                'choice_label' => function ($choice, $key, $value) {
  235. //                    return IdentificacionEnum::getIdentificacion($choice);
  236. //                },
  237.                 'choice_label' => function ($choice$key$value) {
  238.                     return $this->getTranslator()->trans(IdentificacionEnum::getIdentificacion($choice), [], 'enum');
  239.                 },
  240.                 'choice_attr' => function($choice$key$value) {
  241.                     return [
  242.                         'checked' => $choice == IdentificacionEnum::IDENTIFICACION_DNI
  243.                     ];
  244.                 },
  245.             ])
  246.             ->add('identificacion'null, [
  247.                 'label' => false,
  248.                 'disabled' => $this->isDisabled(),
  249.                 'attr' => [
  250.                     'placeholder' => 'form.cliente.placeholder.identificacion',
  251.                     'data-field' => 'identificacion',
  252.                     'class' => 'save-field-db',
  253.                 ],
  254.                 'translation_domain' => 'clienteAdmin',
  255.             ])
  256.             ->add('direccion'null, [
  257.                 'label' => false,
  258.                 'attr' => [
  259.                     'placeholder' => 'form.cliente.placeholder.direccion',
  260.                     'data-field' => 'direccion',
  261.                     'class' => 'save-field-db',
  262.                 ],
  263.                 'translation_domain' => 'clienteAdmin',
  264.             ])
  265.             ->add('cp'null, [
  266.                 'label' => false,
  267.                 'attr' => [
  268.                     'placeholder' => 'form.cliente.placeholder.cp',
  269.                     'data-field' => 'cp',
  270.                     'class' => 'save-field-db',
  271.                 ],
  272.                 'translation_domain' => 'clienteAdmin',
  273.             ])
  274.             ->add('ciudad'null, [
  275.                 'label' => false,
  276.                 'attr' => [
  277.                     'placeholder' => 'form.cliente.placeholder.ciudad',
  278.                     'data-field' => 'ciudad',
  279.                     'class' => 'save-field-db',
  280.                 ],
  281.                 'translation_domain' => 'clienteAdmin',
  282.             ])
  283.             ->add('region'null, [
  284.                 'label' => false,
  285.                 'attr' => [
  286.                     'placeholder' => 'form.cliente.placeholder.region',
  287.                     'data-field' => 'region',
  288.                     'class' => 'save-field-db',
  289.                 ],
  290.                 'translation_domain' => 'clienteAdmin',
  291.             ])
  292.             ->add('provincia'null, [
  293.                 'label' => false,
  294.                 'placeholder' => 'form.cliente.placeholder.provincia',
  295.                 'attr' => [
  296.                     'data-field' => 'provincia',
  297.                     'class' => 'save-field-db',
  298.                 ]
  299.             ])
  300.             ->add('ccaa'null, [
  301.                 'label' => false,
  302.                 'placeholder' => 'form.cliente.placeholder.ccaa',
  303.                 'attr' => [
  304.                     'data-field' => 'ccaa',
  305.                     'class' => 'save-field-db',
  306.                 ]
  307.             ])
  308.             ->add('pais'CountryType::class, [
  309.                 'label' => false,
  310.                 'placeholder' => 'form.cliente.placeholder.pais',
  311.                 'translation_domain' => 'clienteAdmin',
  312.                 'attr' => [
  313.                     'data-field' => 'pais',
  314.                     'class' => 'save-field-db',
  315.                 ]
  316.             ])
  317.             ->add('telefono'null, [
  318.                 'label' => false,
  319.                 'disabled' => $this->isDisabled(),
  320.                 'attr' => [
  321.                     'placeholder' => 'form.cliente.placeholder.telefono',
  322.                     'data-field' => 'telefono',
  323.                     'class' => 'save-field-db',
  324.                 ],
  325.                 'translation_domain' => 'clienteAdmin',
  326.             ])
  327.             ->add('email'null, [
  328.                 'label' => false,
  329.                 'disabled' => $this->isDisabled(),
  330.                 'attr' => [
  331.                     'placeholder' => 'form.cliente.placeholder.email',
  332.                     'data-field' => 'email',
  333.                     'class' => 'save-field-db',
  334.                 ],
  335.                 'translation_domain' => 'clienteAdmin',
  336.             ])
  337.             ->add('identificacionFrontal'HiddenType::class, [
  338.                 'attr' => [
  339.                     'class' => 'vich-file-delete-original'
  340.                 ]
  341.             ])
  342.             ->add('identificacionFrontalFile'VichFileType::class, [
  343.                 'label' => 'form.cliente.label.identificacion_frontal',
  344.                 'disabled' => $this->isDisabled(),
  345.                 'required' => false,
  346.                 'allow_delete' => true,
  347.                 'download_uri' => true,
  348.                 'download_label' => false,
  349.                 'attr' => [
  350.                     'accept' => 'image/jpeg,image/png,image/gif,image/webp,application/pdf',
  351.                     'data-translation_domain' => 'clienteAdmin',
  352.                     'data-title_image_delete' => null,
  353.                     'data-message_image_delete' => null,
  354.                     'data-modal_css_class' => 'alert-utils-cliente',
  355.                     'data-selector_file_original' => 'identificacionFrontal',
  356.                     'class' => 'vich-file-load save-field-db',
  357.                     'data-field' => 'identificacionFrontal',
  358.                     'data-upload-label' => null,
  359.                     'preview' => true
  360.                 ]
  361.             ])
  362.             ->add('identificacionTrasera'HiddenType::class, [
  363.                 'attr' => [
  364.                     'class' => 'vich-file-delete-original'
  365.                 ]
  366.             ])
  367.             ->add('identificacionTraseraFile'VichFileType::class, [
  368.                 'label' => 'form.cliente.label.identificacion_trasera',
  369.                 'disabled' => $this->isDisabled(),
  370.                 'required' => false,
  371.                 'allow_delete' => true,
  372.                 'download_uri' => true,
  373.                 'download_label' => false,
  374.                 'attr' => [
  375.                     'accept' => 'image/jpeg,image/png,image/gif,image/webp,application/pdf',
  376.                     'data-translation_domain' => 'clienteAdmin',
  377.                     'data-title_image_delete' => null,
  378.                     'data-message_image_delete' => null,
  379.                     'data-modal_css_class' => 'alert-utils-cliente',
  380.                     'data-selector_file_original' => 'identificacionTrasera',
  381.                     'class' => 'vich-file-load save-field-db',
  382.                     'data-field' => 'identificacionTrasera',
  383.                     'data-upload-label' => null,
  384.                     'preview' => true
  385.                 ]
  386.             ])
  387.             ->add('idioma'ChoiceType::class, [
  388.                 'label' => false,
  389.                 'disabled' => $this->isDisabled(),
  390.                 'attr' => [
  391.                     'data-field' => 'idioma',
  392.                     'class' => 'save-field-db',
  393.                 ],
  394.                 //'placeholder' => 'form.cliente.placeholder.idioma',
  395.                 'choices' => array_flip(IdiomaEnum::getIdiomas()),
  396.                 'choice_attr' => function($choice$key$value) {
  397.                     return [
  398.                         'checked' => $choice == IdiomaEnum::IDIOMA_ES
  399.                     ];
  400.                 },
  401.             ])
  402.             ->add('entidadBancaria'null, [
  403.                 'label' => false,
  404.                 'disabled' => $this->isDisabled(),
  405.                 'attr' => [
  406.                     'placeholder' => 'form.cliente.placeholder.entidad_bancaria',
  407.                     'data-field' => 'entidadBancaria',
  408.                     'class' => 'save-field-db',
  409.                 ],
  410.                 'translation_domain' => 'clienteAdmin',
  411.             ])
  412.             ->add('iban'null, [
  413.                 'label' => false,
  414.                 'disabled' => $this->isDisabled(),
  415.                 'attr' => [
  416.                     'placeholder' => 'form.cliente.placeholder.iban',
  417.                     'data-field' => 'iban',
  418.                     'class' => 'save-field-db',
  419.                 ],
  420.                 'translation_domain' => 'clienteAdmin',
  421.             ])
  422.             ->add('swift'null, [
  423.                 'label' => false,
  424.                 'disabled' => $this->isDisabled(),
  425.                 'attr' => [
  426.                     'placeholder' => 'form.cliente.placeholder.swift',
  427.                     'data-field' => 'swift',
  428.                     'class' => 'save-field-db',
  429.                 ],
  430.                 'translation_domain' => 'clienteAdmin',
  431.             ])
  432.             ->add('observaciones'null, [
  433.                 'label' => false,
  434.                 'disabled' => $this->isDisabled(),
  435.                 'attr' => [
  436.                     'placeholder' => 'form.cliente.placeholder.observaciones',
  437.                 ],
  438.                 'translation_domain' => 'clienteAdmin',
  439.             ])
  440.         ;
  441.     }
  442.     protected function configureShowFields(ShowMapper $show): void
  443.     {
  444.         $show
  445.             ->add('id')
  446.             ->add('razonSocial')
  447.             ->add('identificacionTipo')
  448.             ->add('identificacion')
  449.             ->add('identificacionFrontal')
  450.             ->add('identificacionTrasera')
  451.             ->add('idioma')
  452.             ->add('entidadBancaria')
  453.             ->add('iban')
  454.             ->add('swift')
  455.             ->add('observaciones')
  456.             ->add('deletedAt')
  457.             ->add('updatedAt')
  458.             ->add('createdAt')
  459.             ;
  460.     }
  461.     private function isDisabled()
  462.     {
  463.         return ($this->code === 'admin.cliente' && isset($_GET['modal']));
  464.     }
  465. }