diff --git a/README.md b/README.md index fe65db2..2166418 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,17 @@ $dataSource = $this->queryObjectDataSourceFactory->create($qo, "id") } }) ->setFilterCallback(function ($queryObject, array $filter) { - foreach ($filter as $field => $value) { - $queryObject->{'by' . $field}($value); + foreach ($filter as $field => $value) { + switch ($column) { + case 'dateRange': + $queryObject->byDateRange(QueryObjectDataSource::parseFilterDateRange($fieldSet)); + break; + case 'date': + $queryObject->byDate(QueryObjectDataSource::parseFilterDate($fieldSet)); + break; + default: + $queryObject->{'by' . $field}($value); + } } }); diff --git a/src/QueryObjectDataSource.php b/src/QueryObjectDataSource.php index c29e68b..9ff3af8 100644 --- a/src/QueryObjectDataSource.php +++ b/src/QueryObjectDataSource.php @@ -148,4 +148,47 @@ public function sort(\Ublaboo\DataGrid\Utils\Sorting $sorting) { return $this; } + /** + * @param FilterDateRange $filter + * @return array + */ + public static function parseFilterDateRange(FilterDateRange $filter) { + + $conditions = $filter->getCondition(); + + $value_from = $conditions[$filter->getColumn()]['from']; + $value_to = $conditions[$filter->getColumn()]['to']; + + if ($value_from) { + $date_from = DateTimeHelper::tryConvertToDate($value_from, [$filter->getPhpFormat()]); + $date_from->setTime(0, 0, 0); + } else { + $date_from = NULL; + } + + if ($value_to) { + $date_to = DateTimeHelper::tryConvertToDate($value_to, [$filter->getPhpFormat()]); + $date_to->setTime(23, 59, 59); + } else { + $date_to = NULL; + } + + return [ + 'from' => $date_from, + 'to' => $date_to, + ]; + } + + /** + * @param FilterDate $filter + * @return \DateTime|null + */ + public static function parseFilterDate(FilterDate $filter) { + foreach ($filter->getCondition() as $column => $value) { + $date = DateTimeHelper::tryConvertToDateTime($value, [$filter->getPhpFormat()]); + $date->setTime(0, 0, 0); + return $date; + } + } + }