Skip to content

Commit 979b221

Browse files
authored
ENGCOM-7110: Fix Report date doesn't matching in configuration setting #27088
2 parents 71ba40e + 36c4167 commit 979b221

File tree

2 files changed

+76
-24
lines changed
  • app/code/Magento/Reports/Block/Adminhtml/Config/Form/Field
  • dev/tests/integration/testsuite/Magento/Reports/Block/Adminhtml/Config/Form/Field

2 files changed

+76
-24
lines changed

app/code/Magento/Reports/Block/Adminhtml/Config/Form/Field/YtdStart.php

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
55
*/
66
namespace Magento\Reports\Block\Adminhtml\Config\Form\Field;
77

8+
use Magento\Config\Block\System\Config\Form\Field;
89
use Magento\Framework\Data\Form\Element\AbstractElement;
910

1011
/**
1112
* Dashboard Year-To-Date Month and Day starts Field Renderer
12-
*
13-
* @author Magento Core Team <[email protected]>
1413
*/
15-
class YtdStart extends \Magento\Config\Block\System\Config\Form\Field
14+
class YtdStart extends Field
1615
{
1716
/**
17+
* Get Month and Day Element
18+
*
1819
* @param AbstractElement $element
1920
* @return string
2021
* @SuppressWarnings(PHPMD.NPathComplexity)
@@ -23,36 +24,29 @@ protected function _getElementHtml(AbstractElement $element)
2324
{
2425
$_months = [];
2526
for ($i = 1; $i <= 12; $i++) {
26-
$_months[$i] = $this->_localeDate->date(mktime(null, null, null, $i, 1))->format('m');
27+
$month = $this->_localeDate->date(mktime(null, null, null, $i, 1))
28+
->format('m');
29+
$_months[$month] = $month;
2730
}
31+
ksort($_months);
32+
2833
$_days = [];
2934
for ($i = 1; $i <= 31; $i++) {
3035
$_days[$i] = $i < 10 ? '0' . $i : $i;
3136
}
3237

33-
if ($element->getValue()) {
34-
$values = explode(',', $element->getValue());
35-
} else {
36-
$values = [];
37-
}
38-
38+
$values = $element->getValue() ? explode(',', $element->getValue()) : [];
3939
$element->setName($element->getName() . '[]');
4040

41-
$_monthsHtml = $element->setStyle(
42-
'width:100px;'
43-
)->setValues(
44-
$_months
45-
)->setValue(
46-
isset($values[0]) ? $values[0] : null
47-
)->getElementHtml();
41+
$_monthsHtml = $element->setStyle('width:100px;')
42+
->setValues($_months)
43+
->setValue(isset($values[0]) ? $values[0] : null)
44+
->getElementHtml();
4845

49-
$_daysHtml = $element->setStyle(
50-
'width:50px;'
51-
)->setValues(
52-
$_days
53-
)->setValue(
54-
isset($values[1]) ? $values[1] : null
55-
)->getElementHtml();
46+
$_daysHtml = $element->setStyle('width:50px;')
47+
->setValues($_days)
48+
->setValue(isset($values[1]) ? $values[1] : null)
49+
->getElementHtml();
5650

5751
return sprintf('%s %s', $_monthsHtml, $_daysHtml);
5852
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Reports\Block\Adminhtml\Config\Form\Field;
9+
10+
use Magento\TestFramework\TestCase\AbstractBackendController;
11+
12+
/**
13+
* Test for \Magento\Reports\Block\Adminhtml\Config\Form\Field\YtdStart.
14+
*
15+
* @magentoAppArea adminhtml
16+
*/
17+
class YtdStartTest extends AbstractBackendController
18+
{
19+
/**
20+
* @var array
21+
*/
22+
private $monthNumbers = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
23+
24+
/**
25+
* Test Get Month and Day Element renderer
26+
*
27+
* @return void
28+
* @magentoAppIsolation enabled
29+
* @magentoDbIsolation enabled
30+
*/
31+
public function testGetElementHtml(): void
32+
{
33+
$this->dispatch('backend/admin/system_config/edit/section/reports/');
34+
$body = $this->getResponse()->getBody();
35+
36+
$this->assertContains($this->getOptionsHtml('01'), $body);
37+
}
38+
39+
/**
40+
* Options html
41+
*
42+
* @param string $selected
43+
* @return string
44+
*/
45+
private function getOptionsHtml(string $selected): string
46+
{
47+
$html = '';
48+
foreach ($this->monthNumbers as $number) {
49+
$html .= $number === $selected
50+
? '<option value="' . $selected . '" selected="selected">' . $selected . '</option>'
51+
: '<option value="' . $number . '">' . $number . '</option>';
52+
53+
$html .= PHP_EOL;
54+
}
55+
56+
return $html;
57+
}
58+
}

0 commit comments

Comments
 (0)