From 876a1bbe16d84e5a73036188c3d68d132cfa3ed0 Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:26:22 +0200 Subject: [PATCH 1/7] feat: add "Last 3 Months" and "Last 6 Months" to dashboard charts --- app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php | 4 ++++ app/code/core/Mage/Adminhtml/Helper/Dashboard/Data.php | 2 ++ .../Mage/Reports/Model/Resource/Order/Collection.php | 10 ++++++++++ .../unit/Mage/Adminhtml/Helper/Dashboard/DataTest.php | 2 ++ 4 files changed, 18 insertions(+) diff --git a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php index 99925d37866..2ccbcbd2a4d 100644 --- a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php +++ b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php @@ -205,6 +205,8 @@ public function generateChart(): array new Zend_Date($_label, 'yyyy-MM-dd'), ); break; + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $formats = Mage::app()->getLocale()->getTranslationList('datetime'); @@ -255,6 +257,8 @@ private function getChartDatasAndDates(): array $date = $dateStart->toString('yyyy-MM-dd'); $dateStart->addDay(1); break; + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $date = $dateStart->toString('yyyy-MM'); diff --git a/app/code/core/Mage/Adminhtml/Helper/Dashboard/Data.php b/app/code/core/Mage/Adminhtml/Helper/Dashboard/Data.php index 750c433a11e..7699f5778d4 100644 --- a/app/code/core/Mage/Adminhtml/Helper/Dashboard/Data.php +++ b/app/code/core/Mage/Adminhtml/Helper/Dashboard/Data.php @@ -77,6 +77,8 @@ public function getDatePeriods() Mage_Reports_Helper_Data::PERIOD_24_HOURS => $this->__('Last 24 Hours'), Mage_Reports_Helper_Data::PERIOD_7_DAYS => $this->__('Last 7 Days'), Mage_Reports_Helper_Data::PERIOD_1_MONTH => $this->__('Current Month'), + Mage_Reports_Helper_Data::PERIOD_3_MONTHS => $this->__('Last 3 Months'), + Mage_Reports_Helper_Data::PERIOD_6_MONTHS => $this->__('Last 6 Months'), Mage_Reports_Helper_Data::PERIOD_1_YEAR => $this->__('YTD'), Mage_Reports_Helper_Data::PERIOD_2_YEARS => $this->__('2YTD'), ]; diff --git a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php index b3dc66e971a..db94b1177d9 100644 --- a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php +++ b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php @@ -349,6 +349,16 @@ public function getDateRange($range, $customStart, $customEnd, $returnObjects = $dateEnd = $customEnd ?: $dateEnd; break; + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start')); + $dateStart->subMonth(2); + break; + + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: + $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start')); + $dateStart->subMonth(5); + break; + case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $startMonthDay = explode(',', Mage::getStoreConfig('reports/dashboard/ytd_start')); diff --git a/tests/unit/Mage/Adminhtml/Helper/Dashboard/DataTest.php b/tests/unit/Mage/Adminhtml/Helper/Dashboard/DataTest.php index 8e6d9f24190..64239b60d40 100644 --- a/tests/unit/Mage/Adminhtml/Helper/Dashboard/DataTest.php +++ b/tests/unit/Mage/Adminhtml/Helper/Dashboard/DataTest.php @@ -63,6 +63,8 @@ public function testGetDatePeriods(): void '24h' => $this->subject->__('Last 24 Hours'), '7d' => $this->subject->__('Last 7 Days'), '1m' => $this->subject->__('Current Month'), + '3m' => $this->subject->__('Last 3 Months'), + '6m' => $this->subject->__('Last 6 Months'), '1y' => $this->subject->__('YTD'), '2y' => $this->subject->__('2YTD'), ]; From 471fecf4893214a32e52cb8150980b872d666673 Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:55:57 +0200 Subject: [PATCH 2/7] fix: fix the issue pointed out by sonarqube --- .../Reports/Model/Resource/Order/Collection.php | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php index db94b1177d9..8cf1debf4f2 100644 --- a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php +++ b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php @@ -341,7 +341,14 @@ public function getDateRange($range, $customStart, $customEnd, $returnObjects = break; case Mage_Reports_Helper_Data::PERIOD_1_MONTH: + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start')); + if ($range === Mage_Reports_Helper_Data::PERIOD_3_MONTHS) { + $dateStart->subMonth(2); + } elseif ($range === Mage_Reports_Helper_Data::PERIOD_6_MONTHS) { + $dateStart->subMonth(5); + } break; case Mage_Reports_Helper_Data::PERIOD_CUSTOM: @@ -349,16 +356,6 @@ public function getDateRange($range, $customStart, $customEnd, $returnObjects = $dateEnd = $customEnd ?: $dateEnd; break; - case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: - $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start')); - $dateStart->subMonth(2); - break; - - case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: - $dateStart->setDay(Mage::getStoreConfig('reports/dashboard/mtd_start')); - $dateStart->subMonth(5); - break; - case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $startMonthDay = explode(',', Mage::getStoreConfig('reports/dashboard/ytd_start')); From 0c2ab1a28d82193e64068b841881c164d0a9b39b Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:42:49 +0200 Subject: [PATCH 3/7] fix: add missing translations --- app/locale/en_US/Mage_Adminhtml.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/locale/en_US/Mage_Adminhtml.csv b/app/locale/en_US/Mage_Adminhtml.csv index c85c5f04c78..dfe7fdfee1a 100644 --- a/app/locale/en_US/Mage_Adminhtml.csv +++ b/app/locale/en_US/Mage_Adminhtml.csv @@ -527,6 +527,8 @@ "Key %s does not contain scalar value","Key %s does not contain scalar value" "Key %s does not exist in array","Key %s does not exist in array" "Last 24 Hours","Last 24 Hours" +"Last 3 Months","Last 3 Months" +"Last 6 Months","Last 6 Months" "Last 5 Orders","Last 5 Orders" "Last 5 Search Terms","Last 5 Search Terms" "Last 7 Days","Last 7 Days" From 66aa170bbf5e0debdb0ec4190d1bdf6ec9f61a7c Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:45:44 +0200 Subject: [PATCH 4/7] fix: fix weekly data aggregation for 3 and 6 month periods --- .../Mage/Adminhtml/Block/Dashboard/Graph.php | 43 ++++++++++++++++--- .../Model/Resource/Order/Collection.php | 2 + 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php index 2ccbcbd2a4d..d44d68fffd7 100644 --- a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php +++ b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php @@ -201,12 +201,12 @@ public function generateChart(): array break; case Mage_Reports_Helper_Data::PERIOD_7_DAYS: case Mage_Reports_Helper_Data::PERIOD_1_MONTH: + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: $this->_axisLabels[$idx][$_index] = $this->formatDate( new Zend_Date($_label, 'yyyy-MM-dd'), ); break; - case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: - case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $formats = Mage::app()->getLocale()->getTranslationList('datetime'); @@ -259,22 +259,53 @@ private function getChartDatasAndDates(): array break; case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: + $date = $dateStart->toString('yyyy-MM-dd'); + $dateStart->addWeek(1); + break; case Mage_Reports_Helper_Data::PERIOD_1_YEAR: case Mage_Reports_Helper_Data::PERIOD_2_YEARS: $date = $dateStart->toString('yyyy-MM'); $dateStart->addMonth(1); break; } + $axisTimestamps = []; + if (in_array($this->getDataHelper()->getParam('period'), [ + Mage_Reports_Helper_Data::PERIOD_3_MONTHS, + Mage_Reports_Helper_Data::PERIOD_6_MONTHS + ])) { + if (empty($axisTimestamps)) { + foreach ($this->_axisLabels['x'] as $axisDate) { + $axisTimestamps[] = (new Zend_Date($axisDate, 'yyyy-MM-dd'))->getTimestamp(); + } + } + } + foreach (array_keys($this->getAllSeries()) as $index) { - if (in_array($date, $this->_axisLabels['x'])) { - $datas[$index][] = (float) array_shift($this->_allSeries[$index]); + if (isset($axisTimestamps)) { + $dateObj = new Zend_Date($date, 'yyyy-MM-dd'); + $weekStartTs = $dateObj->subDay(1)->getTimestamp(); + $weekEndTs = $dateObj->addDay(6)->getTimestamp(); + + $found = false; + foreach ($axisTimestamps as $axisTs) { + if ($axisTs > $weekStartTs && $axisTs < $weekEndTs) { + $datas[$index][] = (float) array_shift($this->_allSeries[$index]); + $found = true; + break; + } + } + + if (!$found) { + $datas[$index][] = 0; + } } else { - $datas[$index][] = 0; + $datas[$index][] = in_array($date, $this->_axisLabels['x']) + ? (float) array_shift($this->_allSeries[$index]) + : 0; } } $dates[] = $date; } - return [$datas, $dates]; } diff --git a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php index 8cf1debf4f2..446b94906cc 100644 --- a/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php +++ b/app/code/core/Mage/Reports/Model/Resource/Order/Collection.php @@ -236,6 +236,8 @@ protected function _getRangeExpression($range) break; case Mage_Reports_Helper_Data::PERIOD_7_DAYS: case Mage_Reports_Helper_Data::PERIOD_1_MONTH: + case Mage_Reports_Helper_Data::PERIOD_3_MONTHS: + case Mage_Reports_Helper_Data::PERIOD_6_MONTHS: $expression = $this->getConnection()->getDateFormatSql('{{attribute}}', '%Y-%m-%d'); break; case Mage_Reports_Helper_Data::PERIOD_1_YEAR: From fea6ad7026989fdaae541baa565b85b953ed6760 Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:55:25 +0200 Subject: [PATCH 5/7] fix: fix php cs errors --- app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php index d44d68fffd7..5dcb8c6875f 100644 --- a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php +++ b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php @@ -268,15 +268,13 @@ private function getChartDatasAndDates(): array $dateStart->addMonth(1); break; } - $axisTimestamps = []; if (in_array($this->getDataHelper()->getParam('period'), [ Mage_Reports_Helper_Data::PERIOD_3_MONTHS, - Mage_Reports_Helper_Data::PERIOD_6_MONTHS + Mage_Reports_Helper_Data::PERIOD_6_MONTHS, ])) { - if (empty($axisTimestamps)) { - foreach ($this->_axisLabels['x'] as $axisDate) { - $axisTimestamps[] = (new Zend_Date($axisDate, 'yyyy-MM-dd'))->getTimestamp(); - } + $axisTimestamps = []; + foreach ($this->_axisLabels['x'] as $axisDate) { + $axisTimestamps[] = (new Zend_Date($axisDate, 'yyyy-MM-dd'))->getTimestamp(); } } From 1c70e236393708420c4dfd929cbb0cfc94c36808 Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:37:55 +0200 Subject: [PATCH 6/7] fix: fix weekly data aggregation for 3 and 6 month periods --- .../core/Mage/Adminhtml/Block/Dashboard/Graph.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php index 5dcb8c6875f..b068c4b2349 100644 --- a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php +++ b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php @@ -245,9 +245,10 @@ private function getChartDatasAndDates(): array $date = ''; $dates = []; $datas = []; + $period = $this->getDataHelper()->getParam('period'); while ($dateStart->compare($dateEnd) < 0) { - switch ($this->getDataHelper()->getParam('period')) { + switch ($period) { case Mage_Reports_Helper_Data::PERIOD_24_HOURS: $date = $dateStart->toString('yyyy-MM-dd HH:00'); $dateStart->addHour(1); @@ -268,7 +269,7 @@ private function getChartDatasAndDates(): array $dateStart->addMonth(1); break; } - if (in_array($this->getDataHelper()->getParam('period'), [ + if (in_array($period, [ Mage_Reports_Helper_Data::PERIOD_3_MONTHS, Mage_Reports_Helper_Data::PERIOD_6_MONTHS, ])) { @@ -277,16 +278,15 @@ private function getChartDatasAndDates(): array $axisTimestamps[] = (new Zend_Date($axisDate, 'yyyy-MM-dd'))->getTimestamp(); } } - foreach (array_keys($this->getAllSeries()) as $index) { if (isset($axisTimestamps)) { $dateObj = new Zend_Date($date, 'yyyy-MM-dd'); - $weekStartTs = $dateObj->subDay(1)->getTimestamp(); - $weekEndTs = $dateObj->addDay(6)->getTimestamp(); - + $weekStartTs = $dateObj->getTimestamp(); + $weekEndTs = $dateObj->addWeek(1)->getTimestamp(); + $found = false; foreach ($axisTimestamps as $axisTs) { - if ($axisTs > $weekStartTs && $axisTs < $weekEndTs) { + if ($axisTs >= $weekStartTs && $axisTs < $weekEndTs) { $datas[$index][] = (float) array_shift($this->_allSeries[$index]); $found = true; break; From 943dad13cb90430f43c4a6702997182849381a87 Mon Sep 17 00:00:00 2001 From: hirale <22028058+hirale@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:09:44 +0200 Subject: [PATCH 7/7] fix: fix php cs errors --- app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php index b068c4b2349..d1b1c7b5fb2 100644 --- a/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php +++ b/app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php @@ -283,7 +283,7 @@ private function getChartDatasAndDates(): array $dateObj = new Zend_Date($date, 'yyyy-MM-dd'); $weekStartTs = $dateObj->getTimestamp(); $weekEndTs = $dateObj->addWeek(1)->getTimestamp(); - + $found = false; foreach ($axisTimestamps as $axisTs) { if ($axisTs >= $weekStartTs && $axisTs < $weekEndTs) {