src/Controller/Admin/OrderCrudController.php line 113

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Controller\Admin\Filter\HcpFilter;
  4. use App\Entity\Order;
  5. use App\Service\CsvExporter;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  8. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  9. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  10. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  17. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  18. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  19. use EasyCorp\Bundle\EasyAdminBundle\Factory\FilterFactory;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  21. use EasyCorp\Bundle\EasyAdminBundle\Filter\DateTimeFilter;
  22. use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter;
  23. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  24. use Symfony\Component\HttpFoundation\RequestStack;
  25. class OrderCrudController extends AbstractCrudController
  26. {
  27.     private AdminUrlGenerator $adminUrlGenerator;
  28.     private RequestStack $requestStack;
  29.     public function __construct(AdminUrlGenerator $adminUrlGeneratorRequestStack $requestStack)
  30.     {
  31.         $this->adminUrlGenerator $adminUrlGenerator;
  32.         $this->requestStack $requestStack;
  33.     }
  34.     public static function getEntityFqcn(): string
  35.     {
  36.         return Order::class;
  37.     }
  38.     public function configureFields(string $pageName): iterable
  39.     {
  40.         return [
  41.             IdField::new('orderId''Order ID')
  42.                 ->setMaxLength(16),
  43.             DateField::new('date''Order Date'),
  44.             // CollectionField::new('orderItems'),
  45.             MoneyField::new('total''Total Price')
  46.                 ->setCurrency('AUD')
  47.                 ->setStoredAsCents(false),
  48.             MoneyField::new('shippingCost''Shipping Cost')
  49.                 ->setCurrency('AUD')
  50.                 ->setStoredAsCents(false),
  51.             TextField::new('hcp''HCP'),
  52.             AssociationField::new('customer''Patient'),
  53.             TextField::new('paymentStatus''Order Status'),
  54.             TextField::new('orderLink')
  55.                 ->renderAsHtml(),
  56.         ];
  57.     }
  58.     public function configureFilters(Filters $filters): Filters
  59.     {
  60.         return $filters
  61.             ->add('hcp')
  62.             ->add(DateTimeFilter::new('date'))
  63.             ->add('paymentStatus')
  64.         ;
  65.     }
  66.     public function configureActions(Actions $actions): Actions
  67.     {
  68.         $exportAction Action::new('export')
  69.             ->linkToUrl(function () {
  70.                 $request $this->requestStack->getCurrentRequest();
  71.                 return $this->adminUrlGenerator->setAll($request->query->all())
  72.                     ->setAction('export')
  73.                     ->generateUrl();
  74.             })
  75.             ->addCssClass('btn btn-success')
  76.             ->setIcon('fa fa-download')
  77.             ->createAsGlobalAction();
  78.         return parent::configureActions($actions)
  79.             ->add(Crud::PAGE_INDEX$exportAction)
  80.             ->remove(Crud::PAGE_INDEXAction::NEW)
  81.             ->disable(Action::NEW, Action::DELETE)
  82.         ;
  83.     }
  84.     public function configureExportFields(): iterable
  85.     {
  86.         return [
  87.             IdField::new('orderId')
  88.                 ->setMaxLength(16),
  89.             DateField::new('date'),
  90.             CollectionField::new('orderItems'),
  91.             // MoneyField::new('total')
  92.             //     ->setCurrency('AUD')
  93.             //     ->setStoredAsCents(false),
  94.             TextField::new('hcp''HCP'),
  95.             AssociationField::new('customer''Patient'),
  96.             TextField::new('paymentStatus'),
  97.         ];
  98.     }
  99.     /**
  100.      * Export CSV with fields given
  101.      */
  102.     public function export(AdminContext $contextCsvExporter $csvExporter)
  103.     {
  104.         $fields FieldCollection::new($this->configureExportFields());
  105.         $filters $this->container->get(FilterFactory::class)->create($context->getCrud()->getFiltersConfig(), $fields$context->getEntity());
  106.         $queryBuilder $this->createIndexQueryBuilder($context->getSearch(), $context->getEntity(), $fields$filters);
  107.         $date = new \DateTime();
  108.         $datetimeString $date->format('Y-m-d-H-i-s');
  109.         return $csvExporter->createOrderResponseFromQueryBuilder($queryBuilder$fieldssprintf('orders_%s.csv'$datetimeString));
  110.     }
  111. }