text: <?php
  
  namespace EasyCorp\Bundle\EasyAdminBundle\Filter;
  
  use Doctrine\ORM\QueryBuilder;
  use EasyCorp\Bundle\EasyAdminBundle\Contracts\Filter\FilterInterface;
  use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
  use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
  use EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\NumericFilterType;
  use EasyCorp\Bundle\EasyAdminBundle\Form\Type\ComparisonType;
  
  /**
   * @author Yonel Ceruto <yonelceruto@gmail.com>
   * @author Javier Eguiluz <javier.eguiluz@gmail.com>
   */
  final class NumericFilter implements FilterInterface
  {
      use FilterTrait;
  
      public static function new(string $propertyName, $label = null): self
      {
          return (new self())
              ->setFilterFqcn(__CLASS__)
              ->setProperty($propertyName)
              ->setLabel($label)
              ->setFormType(NumericFilterType::class)
              ->setFormTypeOption('translation_domain', 'EasyAdminBundle');
      }
  
      public function apply(QueryBuilder $queryBuilder, FilterDataDto $filterDataDto, ?FieldDto $fieldDto, EntityDto $entityDto): void
      {
          $alias = $filterDataDto->getEntityAlias();
          $property = $filterDataDto->getProperty();
          $comparison = $filterDataDto->getComparison();
          $parameterName = $filterDataDto->getParameterName();
          $parameter2Name = $filterDataDto->getParameter2Name();
          $value = $filterDataDto->getValue();
          $value2 = $filterDataDto->getValue2();
  
          if (ComparisonType::BETWEEN === $comparison) {
              $queryBuilder->andWhere(sprintf('%s.%s BETWEEN :%s and :%s', $alias, $property, $parameterName, $parameter2Name))
                  ->setParameter($parameterName, $value)
                  ->setParameter($parameter2Name, $value2);
          } else {
              $queryBuilder->andWhere(sprintf('%s.%s %s :%s', $alias, $property, $comparison, $parameterName))
                  ->setParameter($parameterName, $value);
          }
      }
  }
  