Skip to content

Commit 8f051d8

Browse files
committed
Merge branch 'PR_Troll' of github.com:magento-troll/magento2ce into PR_Troll
2 parents 71a3edf + 9653c0c commit 8f051d8

File tree

19 files changed

+407
-55
lines changed

19 files changed

+407
-55
lines changed

app/code/Magento/Braintree/Test/Unit/Ui/Component/Report/Filters/Type/DateRangeTest.php

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,17 @@ protected function setUp()
7070
->getMock();
7171

7272
$this->dataProviderMock = $this->getMockForAbstractClass(DataProviderInterface::class);
73+
74+
$this->contextMock->expects($this->any())
75+
->method('getNamespace')
76+
->willReturn(DateRange::NAME);
77+
$this->contextMock->expects($this->any())
78+
->method('addComponentDefinition')
79+
->with(DateRange::NAME, ['extends' => DateRange::NAME]);
80+
81+
$this->contextMock->expects($this->any())
82+
->method('getDataProvider')
83+
->willReturn($this->dataProviderMock);
7384
}
7485

7586
/**
@@ -84,29 +95,15 @@ protected function setUp()
8495
*/
8596
public function testPrepare($name, $filterData, $expectedCondition)
8697
{
87-
/** @var FormDate PHPUnit_Framework_MockObject_MockObject|$uiComponent */
88-
$uiComponent = $this->getMockBuilder(FormDate::class)
89-
->disableOriginalConstructor()
90-
->getMock();
91-
92-
$uiComponent->expects($this->any())
93-
->method('getContext')
94-
->willReturn($this->contextMock);
95-
96-
$this->contextMock->expects($this->any())
97-
->method('getNamespace')
98-
->willReturn(DateRange::NAME);
99-
$this->contextMock->expects($this->any())
100-
->method('addComponentDefinition')
101-
->with(DateRange::NAME, ['extends' => DateRange::NAME]);
102-
10398
$this->contextMock->expects($this->any())
10499
->method('getFiltersParams')
105100
->willReturn($filterData);
106101

107-
$this->contextMock->expects($this->any())
108-
->method('getDataProvider')
109-
->willReturn($this->dataProviderMock);
102+
$uiComponent = $this->getMockBuilder(FormDate::class)->disableOriginalConstructor()->getMock();
103+
104+
$uiComponent->expects($this->any())
105+
->method('getContext')
106+
->willReturn($this->contextMock);
110107

111108
if ($expectedCondition !== null) {
112109
if (is_string($filterData[$name])) {
@@ -118,11 +115,11 @@ public function testPrepare($name, $filterData, $expectedCondition)
118115
$uiComponent->method('convertDate')
119116
->willReturnMap([
120117
[
121-
$filterData[$name]['from'], 0, 0, 0,
118+
$filterData[$name]['from'],
122119
new \DateTime($filterData[$name]['from'], new \DateTimeZone('UTC'))
123120
],
124121
[
125-
$filterData[$name]['to'], 23, 59, 59,
122+
$filterData[$name]['to'],
126123
new \DateTime($filterData[$name]['to'] . ' 23:59:00', new \DateTimeZone('UTC'))
127124
],
128125
]);
@@ -161,6 +158,23 @@ public function testPrepare($name, $filterData, $expectedCondition)
161158
->with($filterMock);
162159
break;
163160
}
161+
} else {
162+
$uiComponent->method('convertDate')
163+
->willReturnMap([
164+
[
165+
$filterData[$name]['from'],
166+
new \DateTime($filterData[$name]['from'], new \DateTimeZone('UTC'))
167+
],
168+
[
169+
$filterData[$name]['to'],
170+
new \DateTime($filterData[$name]['to'] . ' 23:59:00', new \DateTimeZone('UTC'))
171+
],
172+
]);
173+
174+
$filterMock = $this->getFilterMockWithoutExpectedCondition();
175+
$this->dataProviderMock->expects(static::exactly(2))
176+
->method('addFilter')
177+
->with($filterMock);
164178
}
165179

166180
$this->uiComponentFactory->expects($this->any())
@@ -212,6 +226,31 @@ private function getFilterMock($name, $expectedType, $expectedDate, &$i)
212226
return $filterMock;
213227
}
214228

229+
/**
230+
* Gets Filter mock without expected condition
231+
*
232+
* @return Filter|\PHPUnit_Framework_MockObject_MockObject
233+
*/
234+
private function getFilterMockWithoutExpectedCondition()
235+
{
236+
$this->filterBuilderMock->expects(static::exactly(2))
237+
->method('setConditionType')
238+
->willReturnSelf();
239+
$this->filterBuilderMock->expects(static::exactly(2))
240+
->method('setField')
241+
->willReturnSelf();
242+
$this->filterBuilderMock->expects(static::exactly(2))
243+
->method('setValue')
244+
->willReturnSelf();
245+
246+
$filterMock = $this->getMock(Filter::class);
247+
$this->filterBuilderMock->expects(static::exactly(2))
248+
->method('create')
249+
->willReturn($filterMock);
250+
251+
return $filterMock;
252+
}
253+
215254
/**
216255
* @return array
217256
*/

app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Tab/Conditions.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Magento\Backend\Block\Widget\Form;
99
use Magento\Backend\Block\Widget\Form\Generic;
1010
use Magento\Ui\Component\Layout\Tabs\TabInterface;
11+
use Magento\Rule\Model\Condition\AbstractCondition;
1112

1213
class Conditions extends Generic implements TabInterface
1314
{
@@ -146,14 +147,16 @@ protected function addTabToForm($model, $fieldsetId = 'conditions_fieldset', $fo
146147
$form = $this->_formFactory->create();
147148
$form->setHtmlIdPrefix('rule_');
148149

150+
$conditionsFieldSetId = $model->getConditionsFieldSetId($formName);
151+
149152
$newChildUrl = $this->getUrl(
150-
'catalog_rule/promo_catalog/newConditionHtml/form/' . $model->getConditionsFieldSetId($formName),
153+
'catalog_rule/promo_catalog/newConditionHtml/form/' . $conditionsFieldSetId,
151154
['form_namespace' => $formName]
152155
);
153156

154157
$renderer = $this->_rendererFieldset->setTemplate('Magento_CatalogRule::promo/fieldset.phtml')
155158
->setNewChildUrl($newChildUrl)
156-
->setFieldSetId($model->getConditionsFieldSetId($formName));
159+
->setFieldSetId($conditionsFieldSetId);
157160

158161
$fieldset = $form->addFieldset(
159162
$fieldsetId,
@@ -175,22 +178,24 @@ protected function addTabToForm($model, $fieldsetId = 'conditions_fieldset', $fo
175178
->setRenderer($this->_conditions);
176179

177180
$form->setValues($model->getData());
178-
$this->setConditionFormName($model->getConditions(), $formName);
181+
$this->setConditionFormName($model->getConditions(), $formName, $conditionsFieldSetId);
179182
return $form;
180183
}
181184

182185
/**
183-
* @param \Magento\Rule\Model\Condition\AbstractCondition $conditions
186+
* @param AbstractCondition $conditions
184187
* @param string $formName
188+
* @param string $jsFormName
185189
* @return void
186190
*/
187-
private function setConditionFormName(\Magento\Rule\Model\Condition\AbstractCondition $conditions, $formName)
191+
private function setConditionFormName(AbstractCondition $conditions, $formName, $jsFormName)
188192
{
189193
$conditions->setFormName($formName);
190-
$conditions->setJsFormObject($formName);
194+
$conditions->setJsFormObject($jsFormName);
195+
191196
if ($conditions->getConditions() && is_array($conditions->getConditions())) {
192197
foreach ($conditions->getConditions() as $condition) {
193-
$this->setConditionFormName($condition, $formName);
198+
$this->setConditionFormName($condition, $formName, $jsFormName);
194199
}
195200
}
196201
}

app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@
230230
<settings>
231231
<timezone>false</timezone>
232232
<dateFormat>MMM d, y</dateFormat>
233+
<skipTime>true</skipTime>
233234
<filter>dateRange</filter>
234235
<dataType>date</dataType>
235236
<label translate="true">Date of Birth</label>

app/code/Magento/Ui/Component/Filters/Type/Date.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
67
namespace Magento\Ui\Component\Filters\Type;
78

89
use Magento\Ui\Component\Form\Element\DataType\Date as DataTypeDate;
@@ -78,12 +79,26 @@ protected function applyFilter()
7879
}
7980

8081
if (is_array($value)) {
82+
$dateFrom = null;
83+
$dateTo = null;
84+
8185
if (isset($value['from'])) {
82-
$this->applyFilterByType('gteq', $this->wrappedComponent->convertDate($value['from']));
86+
$dateFrom = $this->wrappedComponent->convertDate($value['from']);
87+
if ($this->getData('config/skipTime')) {
88+
$dateFrom->setTime(0, 0, 0);
89+
}
90+
$this->applyFilterByType('gteq', $dateFrom);
8391
}
8492

8593
if (isset($value['to'])) {
86-
$this->applyFilterByType('lteq', $this->wrappedComponent->convertDate($value['to'], 23, 59, 59));
94+
$dateTo = $this->wrappedComponent->convertDate($value['to']);
95+
if ($this->getData('config/skipTime')) {
96+
$dateTo->setTime(0, 0, 0);
97+
}
98+
if ($dateFrom == $dateTo) {
99+
$dateTo->setTime(23, 59, 59);
100+
}
101+
$this->applyFilterByType('lteq', $dateTo);
87102
}
88103
} else {
89104
$this->applyFilterByType('eq', $this->wrappedComponent->convertDate($value));

app/code/Magento/Ui/Component/Form/Element/DataType/Date.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,9 @@ public function getComponentName()
9797
* Convert given date to default (UTC) timezone
9898
*
9999
* @param int $date
100-
* @param int $hour
101-
* @param int $minute
102-
* @param int $second
103100
* @return \DateTime|null
104101
*/
105-
public function convertDate($date, $hour = 0, $minute = 0, $second = 0)
102+
public function convertDate($date)
106103
{
107104
try {
108105
$dateObj = $this->localeDate->date(
@@ -113,7 +110,6 @@ public function convertDate($date, $hour = 0, $minute = 0, $second = 0)
113110
$this->getLocale(),
114111
true
115112
);
116-
$dateObj->setTime($hour, $minute, $second);
117113
//convert store date to default date in UTC timezone without DST
118114
$dateObj->setTimezone(new \DateTimeZone('UTC'));
119115
return $dateObj;

app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,30 @@ public function testPrepare($name, $filterData, $expectedCondition)
126126

127127
if ($expectedCondition !== null) {
128128
$this->processFilters($name, $filterData, $expectedCondition, $uiComponent);
129+
} else {
130+
$uiComponent->method('convertDate')
131+
->willReturnMap([
132+
[$filterData[$name]['from'], new \DateTime($filterData[$name]['from'])],
133+
[$filterData[$name]['to'], new \DateTime($filterData[$name]['to'] . ' 23:59:59')],
134+
]);
135+
136+
$this->filterBuilderMock->expects(static::exactly(2))
137+
->method('setConditionType')
138+
->willReturnSelf();
139+
$this->filterBuilderMock->expects(static::exactly(2))
140+
->method('setField')
141+
->willReturnSelf();
142+
$this->filterBuilderMock->expects(static::exactly(2))
143+
->method('setValue')
144+
->willReturnSelf();
145+
146+
$filterMock = $this->getMock(Filter::class);
147+
$this->filterBuilderMock->expects(static::exactly(2))
148+
->method('create')
149+
->willReturn($filterMock);
150+
$this->dataProviderMock->expects(static::exactly(2))
151+
->method('addFilter')
152+
->with($filterMock);
129153
}
130154

131155
$this->uiComponentFactory->expects($this->any())
@@ -230,8 +254,8 @@ private function processFilters($name, $filterData, $expectedCondition, $uiCompo
230254
} else {
231255
$uiComponent->method('convertDate')
232256
->willReturnMap([
233-
[$filterData[$name]['from'], 0, 0, 0, new \DateTime($filterData[$name]['from'])],
234-
[$filterData[$name]['to'], 23, 59, 59, new \DateTime($filterData[$name]['to'] . ' 23:59:59')],
257+
[$filterData[$name]['from'], new \DateTime($filterData[$name]['from'])],
258+
[$filterData[$name]['to'], new \DateTime($filterData[$name]['to'] . ' 23:59:59')],
235259
]);
236260
}
237261

app/code/Magento/Ui/view/base/ui_component/etc/definition.map.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
<item name="dateFormat" type="string" xsi:type="xpath">settings/dateFormat</item>
129129
<item name="timeFormat" type="string" xsi:type="xpath">settings/timeFormat</item>
130130
<item name="timezone" type="string" xsi:type="xpath">settings/timezone</item>
131+
<item name="skipTime" type="boolean" xsi:type="xpath">settings/skipTime</item>
131132
<item name="editor" xsi:type="array">
132133
<item name="editorType" type="string" xsi:type="xpath">settings/editor/editorType</item>
133134
<item name="validation" type="item" xsi:type="converter">settings/editor/validation</item>
@@ -239,6 +240,7 @@
239240
<item name="showsTime" type="boolean" xsi:type="xpath">settings/showsTime</item>
240241
<item name="dateFormat" type="string" xsi:type="xpath">settings/dateFormat</item>
241242
<item name="timeFormat" type="string" xsi:type="xpath">settings/timeFormat</item>
243+
<item name="skipTime" type="string" xsi:type="xpath">settings/skipTime</item>
242244
</item>
243245
</argument>
244246
</schema>

app/code/Magento/Ui/view/base/ui_component/etc/definition/column.xsd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@
9898
</xs:annotation>
9999
</xs:element>
100100
<xs:element name="timeFormat" type="xs:string"/>
101+
<xs:element name="skipTime" type="xs:boolean">
102+
<xs:annotation>
103+
<xs:documentation>
104+
For the Date column: If time not important for filtering.
105+
</xs:documentation>
106+
</xs:annotation>
107+
</xs:element>
101108
<xs:element name="timezone" type="xs:boolean">
102109
<xs:annotation>
103110
<xs:documentation>

app/code/Magento/Ui/view/base/web/js/form/element/date.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ define([
178178

179179
this.pickerDateTimeFormat = utils.convertToMomentFormat(this.pickerDateTimeFormat);
180180

181-
if (this.dateFormat) {
182-
this.inputDateFormat = this.dateFormat;
181+
if (this.options.dateFormat) {
182+
this.outputDateFormat = this.options.dateFormat;
183183
}
184184

185185
this.inputDateFormat = utils.convertToMomentFormat(this.inputDateFormat);

dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/CustomerGrid.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,13 @@ class CustomerGrid extends DataGrid
4444
'entity_id_to' => [
4545
'selector' => '[name="entity_id[to]"]',
4646
],
47+
'dob_from' => [
48+
'selector' => '[name="dob[from]"]',
49+
'input' => 'datepicker',
50+
],
51+
'dob_to' => [
52+
'selector' => '[name="dob[to]"]',
53+
'input' => 'datepicker',
54+
],
4755
];
4856
}

0 commit comments

Comments
 (0)