src/Controller/Admin/CabeceraCrudController.php line 133

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Cabecera;
  4. use App\Entity\Sucursal;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  10. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  11. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\FormField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Filter\BooleanFilter;
  21. use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter;
  22. use EasyCorp\Bundle\EasyAdminBundle\Filter\DateTimeFilter;
  23. use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter;
  24. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  25. // use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  26. use App\Controller\Admin\StatusTrait;
  27. class CabeceraCrudController extends AbstractCrudController
  28. {
  29.     use StatusTrait;
  30.     private $entityManager;
  31.     public static function getEntityFqcn(): string
  32.     {
  33.         return Cabecera::class;
  34.     }
  35.     public function __construct(EntityManagerInterface $entityManager)
  36.     {
  37.         $this->entityManager $entityManager;
  38.     }
  39.     public function configureCrud(Crud $crud): Crud
  40.     {
  41.         return $crud
  42.             ->setDefaultSort(['createdAt' => 'DESC'])
  43.             ->showEntityActionsInlined()
  44.             ->setPageTitle('index''%entity_label_plural%')
  45.             ->setPageTitle('detail''%entity_label_singular% #%entity_id%')
  46.             ->setEntityLabelInSingular('Pedido')
  47.             ->setEntityLabelInPlural('Pedidos')
  48.             ->setSearchFields(['nombrecliente''telefonocliente''user.username'])
  49.             ->setDefaultSort(['createdAt' => 'DESC'])
  50.             ->setDateTimeFormat('dd/MM/yy H:mm')
  51.             ->setPaginatorPageSize(30)
  52.             ->setHelp(Crud::PAGE_INDEX'Todos lo pedidos de la plataforma');
  53.     }
  54.     public function configureFields(string $pageName): iterable
  55.     {
  56.         return [
  57.             FormField::addPanel('Datos De Facturación')->setIcon('fa fa-address-card'),
  58.             TextField::new('nombrecliente''Nombre'),
  59.             TextField::new('telefonocliente''Telefono'),
  60.             TextField::new('direccioncliente''Dirección'),
  61.             TextField::new('emailcliente''Email')->onlyOnDetail(),
  62.             FormField::addPanel('Datos De Envío')->setIcon('fa fa-truck '),
  63.             TextField::new('nombre_receptor''Nombre')->onlyOnDetail(),
  64.             TextField::new('telefono_receptor''Teléfono')->onlyOnDetail(),
  65.             TextField::new('observaciones_receptor''Observaciones')->onlyOnDetail(),
  66.             FormField::addPanel('Datos Del Pedido')->setIcon('fa fa-bars'),
  67.             TextField::new('sucursal''Sucursal'),
  68.             DateTimeField::new('fechareserva''Programado'),
  69.             TextField::new('metododepago''Metodo De Pago')->onlyOnDetail(),
  70.             TextField::new('email_linkdepago''Email Link')->onlyOnDetail(),
  71.             TextField::new('linkdepago''Link de pago')->onlyOnDetail(),
  72.             TextField::new('ultimolinkdepago''Estado de la transacción')
  73.                 ->formatValue(function ($value$entity) {
  74.                     $ultimoLinkdepago $value;
  75.                     if ($ultimoLinkdepago === null) {
  76.                         return sprintf('<span class="badge badge-%s">%s</span>''neutro'htmlspecialchars('N/A'ENT_QUOTES'UTF-8'));
  77.                     }
  78.                     $statusName $this->mapStatusNumberToName($ultimoLinkdepago); // Esta función convierte el número en un nombre de estado.
  79.                     $badgeColor $this->getBadgeColorForStatus($ultimoLinkdepago);
  80.                     return sprintf('<span class="badge badge-%s">%s</span>'$badgeColorhtmlspecialchars($statusNameENT_QUOTES'UTF-8'));
  81.                 })->onlyOnDetail(),
  82.             TextField::new('filename''Cod Unico')->onlyOnDetail(),
  83.             BooleanField::new('isEnviado''XML recibido')->renderAsSwitch(false)->hideOnForm(),
  84.             ChoiceField::new('Tipodeservicio''Tipo')
  85.                 ->setChoices([
  86.                     'DOMICILIO' => 4,
  87.                     'RECOGER' => 16,
  88.                     'PROGRAMADO' => 100,
  89.                 ])
  90.                 ->hideOnDetail(),
  91.             IntegerField::new('user''Vendedor'),
  92.             TextField::new('estado''Estado')->hideOnForm(),
  93.             DateTImeField::new('createdAt''Creado'),
  94.             FormField::addPanel('Log Link de pago')->setIcon('fa fa-list'),
  95.             CollectionField::new('CabeceraLinkdepago''Link de pago')->setTemplatePath('admin/field/linkdepago.html.twig')->onlyOnDetail(),
  96.             FormField::addPanel('Pedido')->setIcon('fa fa-tag'),
  97.             CollectionField::new('lineas''Productos')->setTemplatePath('admin/field/lineas.html.twig')->onlyOnDetail(),
  98.             NumberField::new('propinatotal''Propina')->onlyOnDetail(),
  99.             NumberField::new('Total''Total')->onlyOnDetail(),
  100.             FormField::addPanel('Log')->setIcon('fa fa-list'),
  101.             CollectionField::new('cabecera_status''Estado')->setTemplatePath('admin/field/status.html.twig')->onlyOnDetail(),
  102.         ];
  103.     }
  104.     public function configureActions(Actions $actions): Actions
  105.     {
  106.         $editar Action::new('editar''Editar')
  107.             ->displayIf(static function ($entity) {
  108.                 $estados = array('PROGRAMADO''EDICION'"INICIADO");
  109.                 // return $entity->getEstado() == 'PROGRAMADO';
  110.                 return in_array($entity->getEstado(), $estados);
  111.             })
  112.             ->addCssClass('btn text-success')
  113.             ->linkToRoute('cc_favoritos', function (Cabecera $cabecera): array {
  114.                 return [
  115.                     'id' => $cabecera->getId(),
  116.                     'action' => 'finalizar'
  117.                 ];
  118.             });
  119.         $anular Action::new('anular''Anular')
  120.             ->displayIf(static function ($entity) {
  121.                 $estados = array('PROCESANDO');
  122.                 // if(($entity->getEstado() != 'PROGRAMADO') and ($entity->getIsEnviado() === false)){
  123.                 if (in_array($entity->getEstado(), $estados) and ($entity->getIsEnviado() === false)) {
  124.                     $r true;
  125.                 } else {
  126.                     $r false;
  127.                 }
  128.                 return $r;
  129.             })
  130.             ->addCssClass('btn text-danger')
  131.             ->linkToRoute('cambiar_estado', function (Cabecera $cabecera): array {
  132.                 return [
  133.                     'id' => $cabecera->getId(),
  134.                     'action' => 'anular'
  135.                 ];
  136.             });
  137.         $cancelar Action::new('cancelar''Cancelar')
  138.             ->displayIf(static function ($entity) {
  139.                 $estados = array('INICIADO''PROGRAMADO');
  140.                 // return $entity->getEstado() == 'PROGRAMADO';
  141.                 if (in_array($entity->getEstado(), $estados) and ($entity->getIsEnviado() === false)) {
  142.                     $r true;
  143.                 } else {
  144.                     $r false;
  145.                 }
  146.                 return $r;
  147.             })
  148.             ->addCssClass('btn text-warning')
  149.             ->linkToRoute('cambiar_estado', function (Cabecera $cabecera): array {
  150.                 return [
  151.                     'id' => $cabecera->getId(),
  152.                     'action' => 'cancelar'
  153.                 ];
  154.             });
  155.         return $actions
  156.             ->add(Crud::PAGE_INDEXAction::DETAIL)
  157.             ->add(Crud::PAGE_DETAIL$anular)
  158.             ->add(Crud::PAGE_DETAIL$cancelar)
  159.             ->add(Crud::PAGE_DETAIL$editar)
  160.             ->remove(Crud::PAGE_INDEXAction::DELETE)
  161.             ->remove(Crud::PAGE_INDEXAction::EDIT)
  162.             ->remove(Crud::PAGE_INDEXAction::NEW)
  163.             ->remove(Crud::PAGE_DETAILAction::EDIT)
  164.             ->remove(Crud::PAGE_DETAILAction::DELETE)
  165.             ->setPermission($anular'ROLE_ADMIN');
  166.     }
  167.     public function configureFilters(Filters $filters): Filters
  168.     {
  169.         $sucursales $this->entityManager->getRepository(Sucursal::class)->findAll();
  170.         $choices = [];
  171.         foreach ($sucursales as $i => $sucursal) {
  172.             $choices[$sucursal->getNombre()] = $sucursal->getNombre();
  173.         }
  174.         // return $choices;
  175.         return $filters
  176.             ->add(BooleanFilter::new('isFinalizada''Finalizada'))
  177.             ->add(DateTimeFilter::new('createdAt''Fecha de Creación'))
  178.             ->add(ChoiceFilter::new('sucursal''Sucursal')
  179.                 ->setChoices($choices));
  180.     }
  181. }