From 556e32e09dcf7671ce7ffbb4ae8fbf82b8314bab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Czo=C5=82nowski?= <marcin@czolnowski.net>
Date: Thu, 28 Nov 2013 16:40:19 +0100
Subject: [PATCH] Fix for ecommerce segmentation.

---
 core/DataAccess/LogAggregator.php | 27 +++------------------------
 core/Segment.php                  |  2 ++
 plugins/Goals/Archiver.php        |  3 ++-
 3 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/core/DataAccess/LogAggregator.php b/core/DataAccess/LogAggregator.php
index 18731f3925..82c886236e 100644
--- a/core/DataAccess/LogAggregator.php
+++ b/core/DataAccess/LogAggregator.php
@@ -499,25 +499,6 @@ class LogAggregator
      */
     public function queryEcommerceItems($dimension)
     {
-        $query = "SELECT
-						name as label,
-						" . self::getSqlRevenue('SUM(quantity * price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_REVENUE . "`,
-						" . self::getSqlRevenue('SUM(quantity)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY . "`,
-						" . self::getSqlRevenue('SUM(price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_PRICE . "`,
-						count(distinct idorder) as `" . Metrics::INDEX_ECOMMERCE_ORDERS . "`,
-						count(distinct idvisit) as `" . Metrics::INDEX_NB_VISITS . "`,
-						case idorder when '0' then " . GoalManager::IDGOAL_CART . " else " . GoalManager::IDGOAL_ORDER . " end as ecommerceType
-			 	FROM " . Common::prefixTable('log_conversion_item') . "
-			 		LEFT JOIN " . Common::prefixTable('log_action') . "
-			 		ON $dimension = idaction
-			 	WHERE server_time >= ?
-						AND server_time <= ?
-			 			AND idsite = ?
-			 			AND deleted = 0
-			 	GROUP BY ecommerceType, $dimension
-				ORDER BY null";
-        // Segment not supported yet
-        // $query = $this->query($select, $from, $where, $groupBy, $orderBy);
         $select = array(
             "name as label",
             self::getSqlRevenue('SUM(quantity * price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_REVENUE . "`",
@@ -528,21 +509,19 @@ class LogAggregator
             "case idorder when '0' then " . GoalManager::IDGOAL_CART . " else " . GoalManager::IDGOAL_ORDER . " end as ecommerceType"
         );
 
-        $bind = $this->getBindDatetimeSite();
-        return $this->getDb()->query($query, $bind);
         $from = array(
             "log_conversion_item",
             array(
                 "table" => "log_action",
-                "joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $field)
+                "joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $dimension)
             ),
             array(
                 "table" => "log_visit",
                 "joinOn" => "log_conversion_item.idvisit = log_visit.idvisit"
             )
         );
-        $where = " server_time >= ? AND server_time <= ? AND log_conversion_item.idsite = ? AND deleted = 0";
-        $groupBy = sprintf("ecommerceType, %s", $field);
+        $where = "server_time >= ? AND server_time <= ? AND log_conversion_item.idsite = ? AND deleted = 0";
+        $groupBy = sprintf("ecommerceType, %s", $dimension);
 
         $query = $this->generateQuery(
             implode(", ", $select),
diff --git a/core/Segment.php b/core/Segment.php
index 5c0011f86f..5adfc7238b 100644
--- a/core/Segment.php
+++ b/core/Segment.php
@@ -356,6 +356,8 @@ class Segment
                     if ($table == "log_conversion") {
                         $joinWithSubSelect = true;
                     }
+                } elseif ($table === 'log_conversion_item') {
+                    $join = "log_conversion_item.idvisit = log_visit.idvisit";
                 } else {
                     throw new Exception("Table '$table', can't be joined for segmentation");
                 }
diff --git a/plugins/Goals/Archiver.php b/plugins/Goals/Archiver.php
index 81d45d093b..d112eb9251 100644
--- a/plugins/Goals/Archiver.php
+++ b/plugins/Goals/Archiver.php
@@ -375,7 +375,8 @@ class Archiver extends \Piwik\Plugin\Archiver
         $dataTableToSum = $this->dimensionRecord;
         foreach ($this->dimensionRecord as $recordName) {
             $dataTableToSum[] = self::getItemRecordNameAbandonedCart($recordName);
-        $this->getProcessor()->aggregateDataTableReports($dataTableToSum);
+        }
+        $this->getProcessor()->aggregateDataTableRecords($dataTableToSum);
 
         /*
          *  Archive General Goal metrics
-- 
GitLab