Skip to content

Commit e6eb3a4

Browse files
author
Serhii Balko
committed
Merge remote-tracking branch 'origin/MC-40384' into 2.4-develop-pr50
2 parents 81072a4 + d6f7740 commit e6eb3a4

File tree

2 files changed

+70
-6
lines changed
  • app/code/Magento/Sales/Model/ResourceModel/Order/Grid
  • dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Order/Grid

2 files changed

+70
-6
lines changed

app/code/Magento/Sales/Model/ResourceModel/Order/Grid/Collection.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,25 @@
55
*/
66
namespace Magento\Sales\Model\ResourceModel\Order\Grid;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
910
use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
1011
use Magento\Framework\Event\ManagerInterface as EventManager;
12+
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
13+
use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult;
14+
use Magento\Sales\Model\ResourceModel\Order;
1115
use Psr\Log\LoggerInterface as Logger;
1216

1317
/**
1418
* Order grid collection
1519
*/
16-
class Collection extends \Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult
20+
class Collection extends SearchResult
1721
{
22+
/**
23+
* @var TimezoneInterface
24+
*/
25+
private $timeZone;
26+
1827
/**
1928
* Initialize dependencies.
2029
*
@@ -24,16 +33,20 @@ class Collection extends \Magento\Framework\View\Element\UiComponent\DataProvide
2433
* @param EventManager $eventManager
2534
* @param string $mainTable
2635
* @param string $resourceModel
36+
* @param TimezoneInterface|null $timeZone
2737
*/
2838
public function __construct(
2939
EntityFactory $entityFactory,
3040
Logger $logger,
3141
FetchStrategy $fetchStrategy,
3242
EventManager $eventManager,
3343
$mainTable = 'sales_order_grid',
34-
$resourceModel = \Magento\Sales\Model\ResourceModel\Order::class
44+
$resourceModel = Order::class,
45+
TimezoneInterface $timeZone = null
3546
) {
3647
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel);
48+
$this->timeZone = $timeZone ?: ObjectManager::getInstance()
49+
->get(TimezoneInterface::class);
3750
}
3851

3952
/**
@@ -50,4 +63,20 @@ protected function _initSelect()
5063

5164
return $this;
5265
}
66+
67+
/**
68+
* @inheritDoc
69+
*/
70+
public function addFieldToFilter($field, $condition = null)
71+
{
72+
if ($field === 'created_at') {
73+
if (is_array($condition)) {
74+
foreach ($condition as $key => $value) {
75+
$condition[$key] = $this->timeZone->convertConfigTimeToUtc($value);
76+
}
77+
}
78+
}
79+
80+
return parent::addFieldToFilter($field, $condition);
81+
}
5382
}

dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Order/Grid/CollectionTest.php

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,26 @@
77

88
namespace Magento\Sales\Model\ResourceModel\Order\Grid;
99

10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
1012
use Magento\TestFramework\Helper\Bootstrap;
13+
use PHPUnit\Framework\TestCase;
1114

12-
class CollectionTest extends \PHPUnit\Framework\TestCase
15+
class CollectionTest extends TestCase
1316
{
17+
/**
18+
* @var ObjectManagerInterface
19+
*/
20+
private $objectManager;
21+
22+
/**
23+
* @inheritDoc
24+
*/
25+
protected function setUp(): void
26+
{
27+
$this->objectManager = Bootstrap::getObjectManager();
28+
}
29+
1430
/**
1531
* Tests collection properties.
1632
*
@@ -19,10 +35,8 @@ class CollectionTest extends \PHPUnit\Framework\TestCase
1935
*/
2036
public function testCollectionCreate(): void
2137
{
22-
$objectManager = Bootstrap::getObjectManager();
23-
2438
/** @var Collection $gridCollection */
25-
$gridCollection = $objectManager->get(Collection::class);
39+
$gridCollection = $this->objectManager->get(Collection::class);
2640
$tableDescription = $gridCollection->getConnection()
2741
->describeTable($gridCollection->getMainTable());
2842

@@ -42,4 +56,25 @@ public function testCollectionCreate(): void
4256
self::assertStringContainsString('main_table.', $mappedName);
4357
}
4458
}
59+
60+
/**
61+
* Verifies that filter condition date is being converted to config timezone before select sql query
62+
*
63+
* @return void
64+
*/
65+
public function testAddFieldToFilter(): void
66+
{
67+
$filterDate = "2021-01-19 00:00:00";
68+
/** @var TimezoneInterface $timeZone */
69+
$timeZone = $this->objectManager->get(TimezoneInterface::class);
70+
/** @var Collection $gridCollection */
71+
$gridCollection = $this->objectManager->get(Collection::class);
72+
$convertedDate = $timeZone->convertConfigTimeToUtc($filterDate);
73+
74+
$collection = $gridCollection->addFieldToFilter('created_at', ['qteq' => $filterDate]);
75+
$expectedSelect = "SELECT `main_table`.* FROM `sales_order_grid` AS `main_table` " .
76+
"WHERE (((`main_table`.`created_at` = '{$convertedDate}')))";
77+
78+
$this->assertEquals($expectedSelect, $collection->getSelectSql(true));
79+
}
4580
}

0 commit comments

Comments
 (0)