<?php
declare(strict_types=1);
namespace App\Admin;
use App\Admin\TabMenu\ModuloMaestrosTabMenuAdmin;
use App\Entity\Cliente;
use App\Enum\IdentificacionEnum;
use App\Enum\IdiomaEnum;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Menu\ItemInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Vich\UploaderBundle\Form\Type\VichFileType;
use Vich\UploaderBundle\Form\Type\VichImageType;
final class ClienteAdmin extends AbstractAdmin
{
public function __construct(
$code,
$class,
$baseControllerName,
private ModuloMaestrosTabMenuAdmin $moduloMaestrosTabMenuAdmin,
private EntityManagerInterface $em
) {
parent::__construct($code, $class, $baseControllerName);
}
protected function configureTabMenu(ItemInterface $menu, string $action, ?AdminInterface $childAdmin = null): void
{
$this->moduloMaestrosTabMenuAdmin->configureTabMenu($this, $menu, $action, $childAdmin);
parent::configureTabMenu($menu, $action, $childAdmin);
}
protected function configureDatagridFilters(DatagridMapper $filter): void
{
if($this->getRequest()->get('nav_prometeo')) {
$this->getDatagrid()->setValue('_per_page', null, $_ENV['REGISTROS_PER_PAGE_MODAL']);
}
$filter
->add('busqueda', CallbackFilter::class, [
'label' => false,
'attr' => [
'class' => 'filter-to-navbar-left filter-to-navbar',
'data-order' => '1',
'placeholder' => 'filter.placeholder.busqueda',
],
'callback' => function($queryBuilder, $alias, $field, $value)
{
if (!$value->hasValue()) return;
$this->em->getRepository(Cliente::class)->cbFilter($queryBuilder, $alias, $field, $value);
return true;
},
])
;
}
protected function configureListFields(ListMapper $list): void
{
$this->setTranslationDomain('clienteAdmin');
$parent = $this->getRequest()->get('pcode');
$list
->add('razonSocial', null, [
'label' => 'list.cliente.label.razon_social',
'identifier' => !$parent ? true : false,
'route' => [
'name' => 'edit'
],
'attr' => [
'class' => 'save-field-db'
]
])
->add('identificacionTipo', null, [
'label' => 'list.cliente.label.identificacion_tipo',
'attr' => [
'class' => 'save-field-db'
]
])
->add('identificacion', null, [
'label' => 'list.cliente.label.identificacion',
'attr' => [
'class' => 'save-field-db'
]
])
->add('direccion', null, [
'label' => 'list.cliente.label.direccion',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('cp', null, [
'label' => 'list.cliente.label.cp',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('ciudad', null, [
'label' => 'list.cliente.label.ciudad',
//'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db'
]
])
->add('region', null, [
'label' => 'list.cliente.label.region',
//'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db'
]
])
->add('provincia.id', null, [
'label' => 'list.cliente.label.provincia',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('ccaa.id', null, [
'label' => 'list.cliente.label.ccaa',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('pais', null, [
'label' => 'list.cliente.label.pais',
//'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db'
]
])
->add('telefono', null, [
'label' => 'list.cliente.label.telefono',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('email', null, [
'label' => 'list.cliente.label.email',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('entidadBancaria', null, [
'label' => 'list.cliente.label.entidad_bancaria',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('iban', null, [
'label' => 'list.cliente.label.iban',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('swift', null, [
'label' => 'list.cliente.label.swift',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('identificacionFrontal', null, [
'label' => 'list.cliente.label.identificacion_frontal',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('identificacionTrasera', null, [
'label' => 'list.cliente.label.identificacion_trasera',
'header_style' => 'display:none;',
'attr' => [
'class' => 'save-field-db hidden'
]
])
->add('idioma', null, [
'label' => 'list.cliente.label.idioma',
'attr' => [
'class' => 'save-field-db'
]
])
// ->add(ListMapper::NAME_ACTIONS, null, [
// 'actions' => [
// 'show' => [],
// 'edit' => [],
// 'delete' => [],
// ],
// ])
;
}
protected function configureFormFields(FormMapper $form): void
{
$this->setTranslationDomain('clienteAdmin');
$form
->add('razonSocial', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.razon_social',
'data-field' => 'razonSocial',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('alias', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.alias',
],
'translation_domain' => 'clienteAdmin',
])
->add('identificacionTipo', ChoiceType::class, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'data-field' => 'identificacionTipo',
'class' => 'save-field-db',
],
'choices' => array_flip(IdentificacionEnum::getIdentificaciones()),
// 'choice_value' => function($choice)
// {
// return $choice;
// },
// 'choice_label' => function ($choice, $key, $value) {
// return IdentificacionEnum::getIdentificacion($choice);
// },
'choice_label' => function ($choice, $key, $value) {
return $this->getTranslator()->trans(IdentificacionEnum::getIdentificacion($choice), [], 'enum');
},
'choice_attr' => function($choice, $key, $value) {
return [
'checked' => $choice == IdentificacionEnum::IDENTIFICACION_DNI
];
},
])
->add('identificacion', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.identificacion',
'data-field' => 'identificacion',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('direccion', null, [
'label' => false,
'attr' => [
'placeholder' => 'form.cliente.placeholder.direccion',
'data-field' => 'direccion',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('cp', null, [
'label' => false,
'attr' => [
'placeholder' => 'form.cliente.placeholder.cp',
'data-field' => 'cp',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('ciudad', null, [
'label' => false,
'attr' => [
'placeholder' => 'form.cliente.placeholder.ciudad',
'data-field' => 'ciudad',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('region', null, [
'label' => false,
'attr' => [
'placeholder' => 'form.cliente.placeholder.region',
'data-field' => 'region',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('provincia', null, [
'label' => false,
'placeholder' => 'form.cliente.placeholder.provincia',
'attr' => [
'data-field' => 'provincia',
'class' => 'save-field-db',
]
])
->add('ccaa', null, [
'label' => false,
'placeholder' => 'form.cliente.placeholder.ccaa',
'attr' => [
'data-field' => 'ccaa',
'class' => 'save-field-db',
]
])
->add('pais', CountryType::class, [
'label' => false,
'placeholder' => 'form.cliente.placeholder.pais',
'translation_domain' => 'clienteAdmin',
'attr' => [
'data-field' => 'pais',
'class' => 'save-field-db',
]
])
->add('telefono', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.telefono',
'data-field' => 'telefono',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('email', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.email',
'data-field' => 'email',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('identificacionFrontal', HiddenType::class, [
'attr' => [
'class' => 'vich-file-delete-original'
]
])
->add('identificacionFrontalFile', VichFileType::class, [
'label' => 'form.cliente.label.identificacion_frontal',
'disabled' => $this->isDisabled(),
'required' => false,
'allow_delete' => true,
'download_uri' => true,
'download_label' => false,
'attr' => [
'accept' => 'image/jpeg,image/png,image/gif,image/webp,application/pdf',
'data-translation_domain' => 'clienteAdmin',
'data-title_image_delete' => null,
'data-message_image_delete' => null,
'data-modal_css_class' => 'alert-utils-cliente',
'data-selector_file_original' => 'identificacionFrontal',
'class' => 'vich-file-load save-field-db',
'data-field' => 'identificacionFrontal',
'data-upload-label' => null,
'preview' => true
]
])
->add('identificacionTrasera', HiddenType::class, [
'attr' => [
'class' => 'vich-file-delete-original'
]
])
->add('identificacionTraseraFile', VichFileType::class, [
'label' => 'form.cliente.label.identificacion_trasera',
'disabled' => $this->isDisabled(),
'required' => false,
'allow_delete' => true,
'download_uri' => true,
'download_label' => false,
'attr' => [
'accept' => 'image/jpeg,image/png,image/gif,image/webp,application/pdf',
'data-translation_domain' => 'clienteAdmin',
'data-title_image_delete' => null,
'data-message_image_delete' => null,
'data-modal_css_class' => 'alert-utils-cliente',
'data-selector_file_original' => 'identificacionTrasera',
'class' => 'vich-file-load save-field-db',
'data-field' => 'identificacionTrasera',
'data-upload-label' => null,
'preview' => true
]
])
->add('idioma', ChoiceType::class, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'data-field' => 'idioma',
'class' => 'save-field-db',
],
//'placeholder' => 'form.cliente.placeholder.idioma',
'choices' => array_flip(IdiomaEnum::getIdiomas()),
'choice_attr' => function($choice, $key, $value) {
return [
'checked' => $choice == IdiomaEnum::IDIOMA_ES
];
},
])
->add('entidadBancaria', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.entidad_bancaria',
'data-field' => 'entidadBancaria',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('iban', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.iban',
'data-field' => 'iban',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('swift', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.swift',
'data-field' => 'swift',
'class' => 'save-field-db',
],
'translation_domain' => 'clienteAdmin',
])
->add('observaciones', null, [
'label' => false,
'disabled' => $this->isDisabled(),
'attr' => [
'placeholder' => 'form.cliente.placeholder.observaciones',
],
'translation_domain' => 'clienteAdmin',
])
;
}
protected function configureShowFields(ShowMapper $show): void
{
$show
->add('id')
->add('razonSocial')
->add('identificacionTipo')
->add('identificacion')
->add('identificacionFrontal')
->add('identificacionTrasera')
->add('idioma')
->add('entidadBancaria')
->add('iban')
->add('swift')
->add('observaciones')
->add('deletedAt')
->add('updatedAt')
->add('createdAt')
;
}
private function isDisabled()
{
return ($this->code === 'admin.cliente' && isset($_GET['modal']));
}
}