Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattpiwik <matthieu.aubry@gmail.com>2011-05-23 10:10:53 +0400
committermattpiwik <matthieu.aubry@gmail.com>2011-05-23 10:10:53 +0400
commit3bc135bd9d68446733b54b6f9cab61681f9034a3 (patch)
treea5d9e5cb32a75cf37bf0038407139d48b1a13a86
parent306a4a79d91655ce105c789c3021e8919e8128bb (diff)
Refs #898
When Ecommerce enabled, the first submenu of "Ecommerce & Goals" will be Ecommerce report. On click, loads a graph with below the following metrics: conversions, overall revenue, Average order value, conversion rate and number of purchased products The "segment" tables is similar to other Goal reports, except it shows the following metrics (for each country/continent/server hour/referrer etc.): Visits, Ecommerce orders, Total Revenue, Ecommerce conversion rate, Average Order value, Purchased products. more to come in the UI... git-svn-id: http://dev.piwik.org/svn/trunk@4785 59fd770c-687e-43c8-a1e3-f5a4ff64c105
-rw-r--r--core/API/DataTableGenericFilter.php2
-rw-r--r--core/ArchiveProcessing/Day.php8
-rw-r--r--core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php39
-rw-r--r--core/Menu/Main.php2
-rw-r--r--core/ViewDataTable/HtmlTable/Goals.php119
-rw-r--r--lang/ar.php1
-rw-r--r--lang/bg.php1
-rw-r--r--lang/cs.php1
-rw-r--r--lang/da.php1
-rw-r--r--lang/de.php3
-rw-r--r--lang/el.php1
-rw-r--r--lang/en.php14
-rw-r--r--lang/es.php1
-rw-r--r--lang/eu.php1
-rw-r--r--lang/fi.php1
-rw-r--r--lang/fr.php1
-rw-r--r--lang/hu.php1
-rw-r--r--lang/id.php1
-rw-r--r--lang/is.php1
-rw-r--r--lang/it.php1
-rw-r--r--lang/ja.php1
-rw-r--r--lang/ka.php1
-rw-r--r--lang/lt.php1
-rw-r--r--lang/nb.php1
-rw-r--r--lang/nl.php1
-rw-r--r--lang/nn.php1
-rw-r--r--lang/pl.php1
-rw-r--r--lang/pt-br.php1
-rw-r--r--lang/pt.php1
-rw-r--r--lang/ru.php1
-rw-r--r--lang/sk.php1
-rw-r--r--lang/sl.php1
-rw-r--r--lang/sq.php1
-rw-r--r--lang/sr.php1
-rw-r--r--lang/sv.php1
-rw-r--r--lang/th.php1
-rw-r--r--lang/tr.php1
-rw-r--r--lang/uk.php1
-rw-r--r--lang/zh-cn.php1
-rw-r--r--lang/zh-tw.php1
-rw-r--r--plugins/CoreHome/templates/broadcast.js3
-rw-r--r--plugins/CoreHome/templates/datatable_footer.tpl3
-rw-r--r--plugins/CoreHome/templates/menu.js4
-rw-r--r--plugins/Goals/API.php43
-rw-r--r--plugins/Goals/Controller.php53
-rw-r--r--plugins/Goals/Goals.php27
-rw-r--r--plugins/Goals/templates/title_and_evolution_graph.tpl25
-rw-r--r--plugins/VisitTime/VisitTime.php9
-rw-r--r--tests/integration/Main.test.php2
-rw-r--r--tests/integration/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml4
-rw-r--r--tests/integration/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml4
-rw-r--r--tests/integration/expected/test_apiGetReportMetadata_year__LanguagesManager.getTranslationsForLanguage.xml4
-rw-r--r--tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_day.xml1
-rw-r--r--tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_week.xml1
-rw-r--r--tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml243
-rw-r--r--tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml279
-rw-r--r--tests/integration/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml4
57 files changed, 807 insertions, 122 deletions
diff --git a/core/API/DataTableGenericFilter.php b/core/API/DataTableGenericFilter.php
index b65c9a1b3a..67c95eae03 100644
--- a/core/API/DataTableGenericFilter.php
+++ b/core/API/DataTableGenericFilter.php
@@ -58,7 +58,7 @@ class Piwik_API_DataTableGenericFilter
),
'AddColumnsProcessedMetricsGoal' => array(
'filter_update_columns_when_show_all_goals' => array('integer'),
- 'filter_only_display_idgoal' => array('integer', Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW),
+ 'filter_only_display_idgoal' => array('string', Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW),
),
'Sort' => array(
'filter_sort_column' => array('string'),
diff --git a/core/ArchiveProcessing/Day.php b/core/ArchiveProcessing/Day.php
index f706f949b2..22a613b82c 100644
--- a/core/ArchiveProcessing/Day.php
+++ b/core/ArchiveProcessing/Day.php
@@ -797,12 +797,4 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing
Piwik_Archive::INDEX_GOAL_ECOMMERCE_ITEMS => 0,
);
}
-
- function getGoalRowFromQueryRow($queryRow)
- {
- return array( Piwik_Archive::INDEX_GOAL_NB_CONVERSIONS => $queryRow[Piwik_Archive::INDEX_GOAL_NB_CONVERSIONS],
- Piwik_Archive::INDEX_GOAL_NB_VISITS_CONVERTED => $queryRow[Piwik_Archive::INDEX_GOAL_NB_VISITS_CONVERTED],
- Piwik_Archive::INDEX_GOAL_REVENUE => $queryRow[Piwik_Archive::INDEX_GOAL_REVENUE],
- );
- }
}
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
index 50a1e665b2..fd7d1c80ae 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
@@ -41,7 +41,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
*
* @param Piwik_DataTable $table
* @param bool $enable should be true (automatically set to true when filter_update_columns_when_show_all_goals is found in the API request)
- * @param bool $processOnlyIdGoal Defines what metrics to add (don't process metrics when you don't display them)
+ * @param string $processOnlyIdGoal Defines what metrics to add (don't process metrics when you don't display them)
* If self::GOALS_FULL_TABLE, all Goal metrics (and per goal metrics) will be processed
* If self::GOALS_OVERVIEW, only the main goal metrics will be added
* If an int > 0, then will process only metrics for this specific Goal
@@ -50,6 +50,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
public function __construct( $table, $enable = true, $processOnlyIdGoal )
{
$this->processOnlyIdGoal = $processOnlyIdGoal;
+ $this->isEcommerce = $this->processOnlyIdGoal == 'ecommerceOrder' || $this->processOnlyIdGoal == 'ecommerceAbandonedCart';
// Ensure that all rows with no visit but conversions will be displayed
$this->deleteRowsWithNoVisit = false;
parent::__construct($table);
@@ -76,7 +77,13 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
$revenue = 0;
foreach($goals as $goalId => $columnValue)
{
- if($goalId >= Piwik_Tracker_GoalManager::IDGOAL_ORDER)
+ if($goalId == 'ecommerceAbandonedCart')
+ {
+ continue;
+ }
+ if($goalId >= Piwik_Tracker_GoalManager::IDGOAL_ORDER
+ || $goalId == 'ecommerceOrder'
+ )
{
$revenue += (int)$this->getColumn($columnValue, Piwik_Archive::INDEX_GOAL_REVENUE, Piwik_Archive::$mappingFromIdToNameGoal);
}
@@ -102,10 +109,15 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
continue;
}
+ // Display per goal metrics
+ // - conversion rate
+ // - conversions
+ // - revenue per visit
foreach($goals as $goalId => $columnValue)
{
$goalId = str_replace("idgoal=", "", $goalId);
- if($this->processOnlyIdGoal > self::GOALS_FULL_TABLE
+ if( ($this->processOnlyIdGoal > self::GOALS_FULL_TABLE
+ || $this->isEcommerce)
&& $this->processOnlyIdGoal != $goalId)
{
continue;
@@ -140,13 +152,30 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
// Goal Revenue per visit
$name = 'goal_' . $goalId . '_revenue_per_visit';
// See comment above for $revenuePerVisit
- $revenuePerVisit = round( (float)$this->getColumn($columnValue, Piwik_Archive::INDEX_GOAL_REVENUE, Piwik_Archive::$mappingFromIdToNameGoal) / ($nbVisits == 0 ? $conversions : $nbVisits), $roundingPrecision );
+ $goalRevenue = (float)$this->getColumn($columnValue, Piwik_Archive::INDEX_GOAL_REVENUE, Piwik_Archive::$mappingFromIdToNameGoal);
+ $revenuePerVisit = round( $goalRevenue / ($nbVisits == 0 ? $conversions : $nbVisits), $roundingPrecision );
$newColumns[$name] = $revenuePerVisit;
$expectedColumns[$name] = true;
+ if($this->isEcommerce )
+ {
+ // Total revenue
+ $name = 'goal_' . $goalId . '_revenue';
+ $newColumns[$name] = $goalRevenue;
+ $expectedColumns[$name] = true;
+
+ // AOV Average Order Value
+ $name = 'goal_' . $goalId . '_avg_order_revenue';
+ $newColumns[$name] = $goalRevenue / $conversions;
+ $expectedColumns[$name] = true;
+
+ // Items qty
+ $name = 'goal_' . $goalId . '_items';
+ $newColumns[$name] = $this->getColumn($columnValue, Piwik_Archive::INDEX_GOAL_ECOMMERCE_ITEMS, Piwik_Archive::$mappingFromIdToNameGoal);
+ $expectedColumns[$name] = true;
+ }
}
}
-
$row->addColumns($newColumns);
}
$expectedColumns['revenue_per_visit'] = true;
diff --git a/core/Menu/Main.php b/core/Menu/Main.php
index f063141d9c..06ba79533a 100644
--- a/core/Menu/Main.php
+++ b/core/Menu/Main.php
@@ -18,7 +18,7 @@ class Piwik_Menu_Main extends Piwik_Menu_Abstract
static private $instance = null;
/**
- * @return Piwik_Menu
+ * @return Piwik_Menu_Abstract
*/
static public function getInstance()
{
diff --git a/core/ViewDataTable/HtmlTable/Goals.php b/core/ViewDataTable/HtmlTable/Goals.php
index 62198ec8e8..27d717a513 100644
--- a/core/ViewDataTable/HtmlTable/Goals.php
+++ b/core/ViewDataTable/HtmlTable/Goals.php
@@ -24,7 +24,8 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
public function main()
{
$this->idSite = Piwik_Common::getRequestVar('idSite', null, 'int');
- $this->processOnlyIdGoal = Piwik_Common::getRequestVar('filter_only_display_idgoal', 0, 'int');
+ $this->processOnlyIdGoal = Piwik_Common::getRequestVar('filter_only_display_idgoal', 0, 'string');
+ $this->isEcommerce = $this->processOnlyIdGoal == 'ecommerceOrder';
$this->viewProperties['show_exclude_low_population'] = true;
$this->viewProperties['show_goals'] = true;
@@ -33,29 +34,54 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
array('<br />', '<br />', '<a href="http://piwik.org/docs/tracking-goals-web-analytics/" target="_blank">', '</a>')));
}
- $this->setColumnsTranslations( array(
- 'goal_%s_conversion_rate' => '%s conversion rate',
- 'goal_%s_nb_conversions' => '%s conversions',
- 'goal_%s_revenue_per_visit' => '%s revenue per visit',
-
- 'nb_conversions' => Piwik_Translate('Goals_ColumnConversions'),
- 'conversion_rate' => Piwik_Translate('General_ColumnConversionRate'),
- 'revenue' => Piwik_Translate('Goals_ColumnRevenue'),
- 'revenue_per_visit' => Piwik_Translate('General_ColumnValuePerVisit'),
- ));
$this->setMetricDocumentation('nb_visits', Piwik_Translate('Goals_ColumnVisits'));
- $this->setMetricDocumentation('revenue_per_visit', Piwik_Translate('Goals_ColumnRevenuePerVisitDocumentation'));
-
- $this->setColumnsToDisplay( array(
- 'label',
- 'nb_visits',
- 'goal_%s_nb_conversions',
- 'goal_%s_conversion_rate',
- 'goal_%s_revenue_per_visit',
- 'revenue_per_visit',
- ));
+ if($this->isEcommerce)
+ {
+ $this->setMetricDocumentation('revenue_per_visit', Piwik_Translate('Goals_ColumnRevenuePerVisitDocumentation', Piwik_Translate('General_EcommerceOrders') ));
+ $this->setColumnsTranslations( array(
+ 'goal_%s_conversion_rate' => Piwik_Translate('Goals_ConversionRate'),
+ 'goal_%s_nb_conversions' => Piwik_Translate('General_EcommerceOrders'),
+ 'goal_%s_revenue' => Piwik_Translate('General_TotalRevenue'),
+ 'goal_%s_revenue_per_visit' => Piwik_Translate('General_ColumnValuePerVisit'),
+ 'goal_%s_avg_order_revenue' => Piwik_Translate('General_AverageOrderValue'),
+ 'goal_%s_items' => Piwik_Translate('General_PurchasedProducts'),
+ ));
+ $this->setColumnsToDisplay( array(
+ 'label',
+ 'nb_visits',
+ 'goal_%s_nb_conversions',
+ 'goal_%s_revenue',
+ 'goal_%s_conversion_rate',
+ 'goal_%s_avg_order_revenue',
+ 'goal_%s_items',
+ 'goal_%s_revenue_per_visit',
+ ));
+ }
+ else
+ {
+ $this->setMetricDocumentation('revenue_per_visit', Piwik_Translate('Goals_ColumnRevenuePerVisitDocumentation', Piwik_Translate('Goals_GoalConversions') ));
+ $this->setColumnsTranslations( array(
+ 'goal_%s_conversion_rate' => Piwik_Translate('Goals_ConversionRate'),
+ 'goal_%s_nb_conversions' => Piwik_Translate('Goals_Conversions'),
+ 'goal_%s_revenue_per_visit' => '%s ' . Piwik_Translate('General_ColumnValuePerVisit'),
+
+ 'nb_conversions' => Piwik_Translate('Goals_ColumnConversions'),
+ 'conversion_rate' => Piwik_Translate('General_ColumnConversionRate'),
+ 'revenue' => Piwik_Translate('Goals_ColumnRevenue'),
+ 'revenue_per_visit' => Piwik_Translate('General_ColumnValuePerVisit'),
+ ));
+ $this->setColumnsToDisplay( array(
+ 'label',
+ 'nb_visits',
+ 'goal_%s_nb_conversions',
+ 'goal_%s_conversion_rate',
+ 'goal_%s_revenue_per_visit',
+
+ 'revenue_per_visit',
+ ));
+ }
// We ensure that the 'Sort by' column is actually displayed in the table
// eg. most daily reports sort by nb_uniq_visitors but this column is not displayed in the Goals table
@@ -81,24 +107,41 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
if($idSite)
{
$goals = Piwik_Goals_API::getInstance()->getGoals( $idSite );
+ if($this->isEcommerce)
+ {
+ $goals = array(
+ array( 'idgoal' => 'ecommerceOrder',
+ 'name' => Piwik_Translate('Goals_EcommerceOrder')
+ )
+ );
+ }
}
foreach($columnsNames as $columnName)
{
- if(in_array($columnName, array('goal_%s_conversion_rate', 'goal_%s_nb_conversions', 'goal_%s_revenue_per_visit')))
+ if(in_array($columnName, array(
+ 'goal_%s_conversion_rate',
+ 'goal_%s_nb_conversions',
+ 'goal_%s_revenue_per_visit',
+ 'goal_%s_revenue',
+ 'goal_%s_avg_order_revenue',
+ 'goal_%s_items',
+
+ )))
{
foreach($goals as $goal)
{
$idgoal = $goal['idgoal'];
if($this->processOnlyIdGoal > Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
- && $this->processOnlyIdGoal != $idgoal)
+ && $this->processOnlyIdGoal != $idgoal
+ && !$this->isEcommerce)
{
continue;
}
$name = Piwik_Translate($this->getColumnTranslation($columnName), $goal['name']);
$columnNameGoal = str_replace('%s', $idgoal, $columnName);
$this->setColumnTranslation($columnNameGoal, $name);
- $this->setDynamicMetricDocumentation($columnName, $columnNameGoal, $goal['name']);
- if(strstr($columnNameGoal, '_rate') === false
+ $this->setDynamicMetricDocumentation($columnName, $columnNameGoal, $goal['name'], $goal['idgoal']);
+ if(strpos($columnNameGoal, '_rate') === false
// For the goal table (when the flag icon is clicked), we only display the per Goal Conversion rate
&& $this->processOnlyIdGoal == Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW)
{
@@ -125,8 +168,17 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
}
/** Find the appropriate metric documentation for a goal column */
- private function setDynamicMetricDocumentation($genericMetricName, $metricName, $goalName)
+ private function setDynamicMetricDocumentation($genericMetricName, $metricName, $goalName, $idGoal)
{
+ if($idGoal == 'ecommerceOrder')
+ {
+ $goalName = Piwik_Translate('General_EcommerceOrders');
+ }
+ else
+ {
+ $goalName = '"'.$goalName.'"';
+ }
+
$langString = false;
switch ($genericMetricName)
{
@@ -137,13 +189,22 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
$langString = 'Goals_ColumnConversionRateDocumentation';
break;
case 'goal_%s_revenue_per_visit':
+ $langString = 'Goals_ColumnRevenuePerVisitDocumentation';
+ break;
+ case 'goal_%s_revenue':
$langString = 'Goals_ColumnRevenueDocumentation';
break;
+ case 'goal_%s_avg_order_revenue':
+ $langString = 'Goals_ColumnAverageOrderRevenueDocumentation';
+ break;
+ case 'goal_%s_items':
+ $langString = 'Goals_ColumnPurchasedProductsDocumentation';
+ break;
}
if ($langString)
{
- $doc = Piwik_Translate($langString, '"'.$goalName.'"');
+ $doc = Piwik_Translate($langString, $goalName);
$this->setMetricDocumentation($metricName, $doc);
}
}
@@ -151,7 +212,9 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
protected function getRequestString()
{
$requestString = parent::getRequestString();
- if($this->processOnlyIdGoal > Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE)
+ if($this->processOnlyIdGoal > Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
+ || $this->isEcommerce
+ )
{
$requestString .= "&filter_only_display_idgoal=".$this->processOnlyIdGoal;
}
diff --git a/lang/ar.php b/lang/ar.php
index 80473c655e..11f74bed9d 100644
--- a/lang/ar.php
+++ b/lang/ar.php
@@ -463,7 +463,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'يجب أن يكون طول الرسالة %s رمزاً على الأقل.',
'Feedback_ExceptionNoUrls' => 'لا يمكن أن تتضمن الرسالة روابط ويب لتجنب الرسائل المزعجة.',
'Goals_Goals' => 'الأهداف',
- 'Goals_Overview' => 'نظرة عامة',
'Goals_GoalsOverview' => 'نظرة عامة على الأهداف',
'Goals_GoalsManagement' => 'إدارة الأهداف',
'Goals_ConversionsOverviewBy' => 'التحويل العام بواسطة نوع الزيارة',
diff --git a/lang/bg.php b/lang/bg.php
index ab5f8d8b5b..aab6724a5f 100644
--- a/lang/bg.php
+++ b/lang/bg.php
@@ -455,7 +455,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Съобщението трябва да бъде дълго поне %s символа.',
'Feedback_ExceptionNoUrls' => 'За да се избегнат спам съобщения, не може да добавяте URL адрес във Вашето съобщение.',
'Goals_Goals' => 'Цели',
- 'Goals_Overview' => 'Общ преглед',
'Goals_GoalsOverview' => 'Общ преглед на целите',
'Goals_GoalsManagement' => 'Управление на целите',
'Goals_ViewGoalsBy' => 'Преглед на цели по %s',
diff --git a/lang/cs.php b/lang/cs.php
index 1afc8e1659..7f6126f1f5 100644
--- a/lang/cs.php
+++ b/lang/cs.php
@@ -403,7 +403,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Zpráva musí být dlouhá alespon %s znaků',
'Feedback_ExceptionNoUrls' => 'Zpráva nemůže obsahovat URL, aby se zabránilo spamu',
'Goals_Goals' => 'Cíle',
- 'Goals_Overview' => 'Přehled',
'Goals_GoalsOverview' => 'Přehled cílů',
'Goals_GoalsManagement' => 'Správa cílů',
'Goals_PluginDescription' => 'Vytvořít cíle a zobrazit hlášení o konverzi cílů: vývoj v čase, příjem za návštěvu, konverze za refereru, klíčové slovo, atd.',
diff --git a/lang/da.php b/lang/da.php
index 63375ba295..a376246da8 100644
--- a/lang/da.php
+++ b/lang/da.php
@@ -448,7 +448,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Meddelelse skal være på mindst %s tegn.',
'Feedback_ExceptionNoUrls' => 'For at undgå spam, kan meddelelsen ikke indeholde en netadresse.',
'Goals_Goals' => 'Mål',
- 'Goals_Overview' => 'Oversigt',
'Goals_GoalsOverview' => 'Måloversigt',
'Goals_GoalsManagement' => 'Mål administration',
'Goals_ConversionsOverviewBy' => 'Konverteringsoversigt efter besøgstype',
diff --git a/lang/de.php b/lang/de.php
index daca73ad37..d038a1a7a8 100644
--- a/lang/de.php
+++ b/lang/de.php
@@ -465,7 +465,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Die Nachricht muss mindestens %s Zeichen lang sein.',
'Feedback_ExceptionNoUrls' => 'Um Spam zu vermeiden, darf die Nachricht keine URL enthalten.',
'Goals_Goals' => 'Ziele',
- 'Goals_Overview' => 'Übersicht',
'Goals_GoalsOverview' => 'Ziele-Übersicht',
'Goals_GoalsManagement' => 'Ziele-Management',
'Goals_ConversionsOverviewBy' => 'Überblick über Konversionen nach Besuchstyp',
@@ -1246,7 +1245,7 @@ $translations = array(
'PDFReports_PiwikReports' => 'Piwik-Berichte',
'PDFReports_EmailHello' => 'Hallo,',
'PDFReports_PleaseFindAttachedFile' => 'Sie finden in der angehängten Datei Ihren %1$s Bericht für %2$s.',
- 'PDFReports_Pagination' => 'Seite %s von %s',
+ 'PDFReports_Pagination' => 'Seite %s von %s',
// FOR REVIEW
'EntryPage_Bounces' => 'Absprünge',
diff --git a/lang/el.php b/lang/el.php
index ec4132e31c..5926963787 100644
--- a/lang/el.php
+++ b/lang/el.php
@@ -463,7 +463,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Το μήνυμα πρέπει να είναι τουλάχιστον %s χαρακτήρες.',
'Feedback_ExceptionNoUrls' => 'Το μήνυμα δεν μπορεί να περιέχει URL, για αποφυγεί κακόβουλων μηνυμάτων.',
'Goals_Goals' => 'Στόχοι',
- 'Goals_Overview' => 'Επισκόπηση',
'Goals_GoalsOverview' => 'Επισκόπηση στόχων',
'Goals_GoalsManagement' => 'Διαχείριση στόχων',
'Goals_ConversionsOverviewBy' => 'Επισκόπηση μετατροπών ανά τμήμα',
diff --git a/lang/en.php b/lang/en.php
index 6150ba364a..bce352f758 100644
--- a/lang/en.php
+++ b/lang/en.php
@@ -41,6 +41,10 @@ $translations = array(
'General_Done' => 'Done',
'General_Name' => 'Name',
'General_Value' => 'Value',
+ 'General_AverageOrderValue' => 'Average Order Value',
+ 'General_PurchasedProducts' => 'Purchased Products',
+ 'General_EcommerceOrders' => 'Ecommerce Orders',
+ 'General_TotalRevenue' => 'Total Revenue',
'General_Quantity' => 'Quantity',
'General_Price' => 'Price',
'General_Subtotal' => 'Subtotal',
@@ -510,7 +514,6 @@ $translations = array(
'Feedback_ExceptionNoUrls' => 'The message cannot contain a URL, to avoid spam messages.',
'Goals_Goals' => 'Goals',
'Goals_EcommerceAndGoalsMenu' => 'Ecommerce & Goals',
- 'Goals_Overview' => 'Overview',
'Goals_Ecommerce' => 'Ecommerce',
'Goals_EcommerceOrder' => 'Ecommerce order',
'Goals_AbandonedCart' => 'Abandoned Cart',
@@ -526,14 +529,17 @@ $translations = array(
'Goals_PluginDescription' => 'Create Goals and see reports about your goal conversions: evolution over time, revenue per visit, conversions per referrer, per keyword, etc.',
'Goals_ConversionByTypeReportDocumentation' => 'This report provides detailed information about the goal performance (conversions, conversion rates and revenue per visit) for each of the categories available in the left panel. %s Please click on one of the categories to view the report. %s For more information, read the %sTracking Goals documentation on piwik.org%s',
'Goals_ColumnConversions' => 'Conversions',
- 'Goals_ColumnConversionsDocumentation' => 'The number of visits that triggered the goal %s.',
+ 'Goals_ColumnConversionsDocumentation' => 'The number of conversions for %s.',
'Goals_ColumnRevenue' => 'Revenue',
- 'Goals_ColumnRevenueDocumentation' => 'The total revenue generated by %s conversions divided by the number of visits.',
+ 'Goals_ColumnRevenueDocumentation' => 'The total revenue generated by %s conversions.',
'Goals_ColumnConversionRateDocumentation' => 'The percentage of visits that triggered the goal %s.',
- 'Goals_ColumnRevenuePerVisitDocumentation' => 'The total revenue generated by all goal conversions divided by the number of visits.',
+ 'Goals_ColumnRevenuePerVisitDocumentation' => 'The total revenue generated by %s divided by the number of visits.',
+ 'Goals_ColumnAverageOrderRevenueDocumentation' => 'Average Order Value (AOV) is the total revenue from all Ecommerce Orders divided by the number of orders.',
+ 'Goals_ColumnPurchasedProductsDocumentation' => 'The number of purchased products is the sum of Product quantities sold in all Ecommerce orders.',
'Goals_ColumnVisits' => 'The total number of visits, regardless of whether a goal was triggered or not.',
'Goals_GoalX' => 'Goal %s',
'Goals_GoalConversion' => 'Goal conversion',
+ 'Goals_GoalConversions' => 'Goal conversions',
'Goals_OverallRevenue' => '%s overall revenue',
'Goals_OverallConversionRate' => '%s overall conversion rate (visits with a completed goal)',
'Goals_Conversions' => '%s conversions',
diff --git a/lang/es.php b/lang/es.php
index 24bd641778..52f5f03679 100644
--- a/lang/es.php
+++ b/lang/es.php
@@ -420,7 +420,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'El mensaje debe tener al menos %s caracteres de largo',
'Feedback_ExceptionNoUrls' => 'Este mensaje no puede contener URL, para evitar mensajes de spam.',
'Goals_Goals' => 'Objetivos',
- 'Goals_Overview' => 'Vista general',
'Goals_GoalsOverview' => 'Vista de objetivos',
'Goals_GoalsManagement' => 'Administración de objetivos',
'Goals_PluginDescription' => 'Crear Objetivos y ver informes acerca de las conversiones de su objetivo: evolución en el tiempo, los ingresos por visita, conversiones por referente, por palabra clave, etc',
diff --git a/lang/eu.php b/lang/eu.php
index 6238306b86..0060aef5e3 100644
--- a/lang/eu.php
+++ b/lang/eu.php
@@ -325,7 +325,6 @@ $translations = array(
'DBStats_IndexSize' => 'Indizearen tamaina',
'DBStats_TotalSize' => 'Tamaina osoa',
'Goals_Goals' => 'Helburuak',
- 'Goals_Overview' => 'Orokorra',
'Goals_GoalsOverview' => 'Helburuen ikuspegi orokorra',
'Goals_GoalsManagement' => 'Helburuen kudeaketa',
'Goals_ColumnConversions' => 'Bihurketa',
diff --git a/lang/fi.php b/lang/fi.php
index 1544068320..a1ec59f8eb 100644
--- a/lang/fi.php
+++ b/lang/fi.php
@@ -420,7 +420,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Viestin pitää olla vähintään %s merkkiä pitkä.',
'Feedback_ExceptionNoUrls' => 'Viesti ei voi sisältää URL-osoitteita. Tällä vältetään roskapostia.',
'Goals_Goals' => 'Tavoitteet',
- 'Goals_Overview' => 'Yleiskatsaus',
'Goals_GoalsOverview' => 'Tavoitteiden yleiskatsaus',
'Goals_GoalsManagement' => 'Tavoitteiden hallinta',
'Goals_PluginDescription' => 'Luo tavoitteita ja katso raportteja: muutokset, tulot per käynti, siirtymisiä per viittaaja, per hakusana jne.',
diff --git a/lang/fr.php b/lang/fr.php
index fce50eb397..ef2e7c0dd4 100644
--- a/lang/fr.php
+++ b/lang/fr.php
@@ -463,7 +463,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Le message doit faire au moins %s caractères de longueur.',
'Feedback_ExceptionNoUrls' => 'Le message ne peut contenir d\'URL pour éviter les problèmes de spam.',
'Goals_Goals' => 'Objectifs',
- 'Goals_Overview' => 'Vue d\'ensemble',
'Goals_GoalsOverview' => 'Vue d\'ensemble des Objectifs',
'Goals_GoalsManagement' => 'Gestion des Objectifs',
'Goals_ConversionsOverviewBy' => 'Vue d\'ensemble des conversions par type de visite',
diff --git a/lang/hu.php b/lang/hu.php
index b5d6fcf75a..851bc1f267 100644
--- a/lang/hu.php
+++ b/lang/hu.php
@@ -420,7 +420,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Az üzenetnek legalább %s karakter hosszúnak kell lennie.',
'Feedback_ExceptionNoUrls' => 'Az üzenet nem tartalmazhat URL-t, hogy elkerüljük a spam üzenetek elküldését.',
'Goals_Goals' => 'Célok',
- 'Goals_Overview' => 'Áttekintés',
'Goals_GoalsOverview' => 'Célok áttekintése',
'Goals_GoalsManagement' => 'Célok kezelése',
'Goals_PluginDescription' => 'Hozz létre célokat és hogy részlete jelentésekkel rendelkezz a célkonverziókról: tendenciákat, az egy látogatásra jutó bevételt, a hivatkozó források vagy kulcsszavak szerinti konverziókat, stb.',
diff --git a/lang/id.php b/lang/id.php
index 01efb4b55b..9ca0be4d9c 100644
--- a/lang/id.php
+++ b/lang/id.php
@@ -416,7 +416,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Pesah harus mempunyai panjang setidaknya %s karakter.',
'Feedback_ExceptionNoUrls' => 'Pesan tidak dapat mengandung sebuah URL, untuk menghindari pesan span.',
'Goals_Goals' => 'Tujuan',
- 'Goals_Overview' => 'Ikhtisar',
'Goals_GoalsOverview' => 'Ikhtisar tujuan',
'Goals_GoalsManagement' => 'Manajemen Tujuan',
'Goals_PluginDescription' => 'Buat Tujuan dan lihat laporan tentang konversi tujuan Anda: perkembangan dari waktu ke waktu, pendapatan setiap kunjungan, konversi setiap referal, setiap kata kunci, dan lain-lain.',
diff --git a/lang/is.php b/lang/is.php
index e998dd06ef..de54aee6a0 100644
--- a/lang/is.php
+++ b/lang/is.php
@@ -317,7 +317,6 @@ $translations = array(
'DBStats_TotalSize' => 'Heildarstærð',
'ExampleAPI_PluginDescription' => 'Dæmi íbót: Hvernig á að búa til API fyrir þína íbót til að flytja gögn þín í mörgum sniðum án sérstakar kóðunar?',
'Goals_Goals' => 'Markmið',
- 'Goals_Overview' => 'Yfirlit',
'Goals_GoalsOverview' => 'Yfirlit Markmiða',
'Goals_GoalsManagement' => 'Markmiðastjórnun',
'Goals_ColumnConversions' => 'Umbreytingar',
diff --git a/lang/it.php b/lang/it.php
index f435e49c07..8588994988 100644
--- a/lang/it.php
+++ b/lang/it.php
@@ -450,7 +450,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Il messaggio deve essere lungo almeno %s caratteri.',
'Feedback_ExceptionNoUrls' => 'Il messaggio non può contenere URL, per evitare messaggi di SPAM.',
'Goals_Goals' => 'Goal',
- 'Goals_Overview' => 'Panoramica',
'Goals_GoalsOverview' => 'Panoramica Goal',
'Goals_GoalsManagement' => 'Gestione Goal',
'Goals_ViewGoalsBy' => 'Vedi goal da %s',
diff --git a/lang/ja.php b/lang/ja.php
index c16df65e86..3f4d697272 100644
--- a/lang/ja.php
+++ b/lang/ja.php
@@ -431,7 +431,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'メッセージは少なくとも %s 文字以上が必要です。',
'Feedback_ExceptionNoUrls' => 'スパムメッセージを防止するため、メッセージに URL を含めることはできません。',
'Goals_Goals' => '目標',
- 'Goals_Overview' => '概観',
'Goals_GoalsOverview' => '目標の概観',
'Goals_GoalsManagement' => '目標の管理',
'Goals_PluginDescription' => '目標を作成し、目標コンバージョンに関するリポート(一定期間の推移、ビジット単位の収益、参照元やキーワード単位のコンバージョン等)を表示します。',
diff --git a/lang/ka.php b/lang/ka.php
index 33c4d6ba8e..1e0846882f 100644
--- a/lang/ka.php
+++ b/lang/ka.php
@@ -430,7 +430,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'წერილი %s სიმბოლოს მაინც უნდა შეიცავდეს.',
'Feedback_ExceptionNoUrls' => 'წერილი არ შეიძლება შეიცავდეს URL–ს, არასასურველი წერილებისგან თავის დაცვის გამო.',
'Goals_Goals' => 'მიზნები',
- 'Goals_Overview' => 'მიმოხილვა',
'Goals_GoalsOverview' => 'მიზნების მიმოხილვა',
'Goals_GoalsManagement' => 'მიზნების მენეჯმენტი',
'Goals_PluginDescription' => 'შექმენით მიზანი და იხილეთ რეპორტები თქვენი მიზნის კონვერსიის შესახებ: დროის მიხედვით ევოლუცია, შემოსავალი ვიზიტზე, კონვერსიები რეფერერზე, საკვანძო სიტყვაზე, და სხვ.',
diff --git a/lang/lt.php b/lang/lt.php
index c5d4e7b8a7..07bc3ac8e8 100644
--- a/lang/lt.php
+++ b/lang/lt.php
@@ -413,7 +413,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Žinutė privalo būti mažiausiai %s simbolių ilgio.',
'Feedback_ExceptionNoUrls' => 'Žinutės tekste negali būti interneto adresų (URL) siekiant išvengti brukalų.',
'Goals_Goals' => 'Uždaviniai',
- 'Goals_Overview' => 'Apžvalga',
'Goals_GoalsOverview' => 'Uždavinių apžvalga',
'Goals_GoalsManagement' => 'Uždavinių valdymas',
'Goals_PluginDescription' => 'Sukurkite uždavinius ir stebėkite ataskaitas apie uždavinių konversijas: raidą per laikotarpį, vizito pajamas, nuorodų, raktažodžių konversijas ir t.t.',
diff --git a/lang/nb.php b/lang/nb.php
index d46757b1c1..26fea919f8 100644
--- a/lang/nb.php
+++ b/lang/nb.php
@@ -407,7 +407,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Meldingen må være minst %s tegn lang.',
'Feedback_ExceptionNoUrls' => 'Meldingen kan ikke inneholde en URL (for å unngå spam)',
'Goals_Goals' => 'Mål',
- 'Goals_Overview' => 'Oversikt',
'Goals_ColumnConversions' => 'Konvertering',
'Goals_ColumnRevenue' => 'Inntekter',
'Goals_AddNewGoal' => 'Legg til et nytt mål',
diff --git a/lang/nl.php b/lang/nl.php
index 5ccc2e7509..ca3c47e9b6 100644
--- a/lang/nl.php
+++ b/lang/nl.php
@@ -437,7 +437,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Het bericht moet tenminste %s tekens bevatten.',
'Feedback_ExceptionNoUrls' => 'Het bericht mag geen URL bevatten, om spam berichten te vermijden',
'Goals_Goals' => 'Doelen',
- 'Goals_Overview' => 'Overzicht',
'Goals_GoalsOverview' => 'Overzicht van doelen',
'Goals_GoalsManagement' => 'Doel beheer',
'Goals_ViewGoalsBy' => 'Bekijk doelen volgens %s',
diff --git a/lang/nn.php b/lang/nn.php
index b462b2f95b..0f83ede041 100644
--- a/lang/nn.php
+++ b/lang/nn.php
@@ -334,7 +334,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Meldinga må vera minst %s teikn lang.',
'Feedback_ExceptionNoUrls' => 'For å forhindra søppelpost, kan ikkje meldinga innehalda URLar.',
'Goals_Goals' => 'Mål',
- 'Goals_Overview' => 'Oversikt',
'Goals_GoalsOverview' => 'Måloversikt',
'Goals_ColumnConversions' => 'Overgangar',
'Goals_ColumnRevenue' => 'Forteneste',
diff --git a/lang/pl.php b/lang/pl.php
index 9a7a154635..eaeaf070e4 100644
--- a/lang/pl.php
+++ b/lang/pl.php
@@ -368,7 +368,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Wiadomość musi zawierać przynajmniej %s znaków.',
'Feedback_ExceptionNoUrls' => 'Ta wiadomość nie może zawierać adresów URL, aby uniknąć spamu.',
'Goals_Goals' => 'Cele',
- 'Goals_Overview' => 'Przegląd',
'Goals_GoalsOverview' => 'Przegląd celów',
'Goals_GoalsManagement' => 'Zarządzanie celami',
'Goals_PluginDescription' => 'Twórz cele i przeglądaj raporty z konwersji: rozwój w czasie, przychód z wizyty, konwersja dla odnośnika, dla słowa kluczowego itp.',
diff --git a/lang/pt-br.php b/lang/pt-br.php
index 80a6ac718e..3618118ea2 100644
--- a/lang/pt-br.php
+++ b/lang/pt-br.php
@@ -409,7 +409,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'A mensagem deve ter pelo menos %s caracteres.',
'Feedback_ExceptionNoUrls' => 'A mensagem não pode conter uma URL para evitar mensagens spam.',
'Goals_Goals' => 'Metas',
- 'Goals_Overview' => 'Visão Geral',
'Goals_GoalsOverview' => 'Visão geral de metas',
'Goals_GoalsManagement' => 'Gerenciamento de metas',
'Goals_PluginDescription' => 'Crie metas e veja relatórios sobre suas metas de conversão: evolução sobre o tempo, lucro por visita, conversões por referencia, por palavra-chave, etc.',
diff --git a/lang/pt.php b/lang/pt.php
index 6b49c92bcd..99164c0ac9 100644
--- a/lang/pt.php
+++ b/lang/pt.php
@@ -413,7 +413,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'A mensagem tem que ter no mínimo %s caracteres.',
'Feedback_ExceptionNoUrls' => 'A mensagem não pode conter um endereço para evitar mensagens spam.',
'Goals_Goals' => 'Objectivos',
- 'Goals_Overview' => 'Vista geral',
'Goals_GoalsOverview' => 'Vista geral dos Objectivos',
'Goals_GoalsManagement' => 'Gerir objectivos',
'Goals_PluginDescription' => 'Criar Objectivos e ver relatórios acerca das suas conversões de objectivos: evolução ao longo do tempo, rendimento por visita, conversões por referente, por palavra chave, etc.',
diff --git a/lang/ru.php b/lang/ru.php
index ec1dd09690..35490f1fea 100644
--- a/lang/ru.php
+++ b/lang/ru.php
@@ -457,7 +457,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Сообщение должно быть как минимум %s символов.',
'Feedback_ExceptionNoUrls' => 'Сообщение не может содержать URL, это мера предотвращения спама.',
'Goals_Goals' => 'Цели',
- 'Goals_Overview' => 'Обзор',
'Goals_GoalsOverview' => 'Обзор целей',
'Goals_GoalsManagement' => 'Управления целями',
'Goals_ConversionsOverviewBy' => 'Обзор конверсий по типам посещения',
diff --git a/lang/sk.php b/lang/sk.php
index 4bfebf8263..b74f1aa47e 100644
--- a/lang/sk.php
+++ b/lang/sk.php
@@ -333,7 +333,6 @@ $translations = array(
'DBStats_IndexSize' => 'Veľkosť indexu',
'DBStats_TotalSize' => 'Celková veľkosť',
'Goals_Goals' => 'Ciele',
- 'Goals_Overview' => 'Prehľad',
'Goals_GoalsOverview' => 'Prehľad cieľov',
'Goals_GoalsManagement' => 'Správa cieľov',
'Goals_ColumnConversions' => 'Konverzie',
diff --git a/lang/sl.php b/lang/sl.php
index a39c93d980..a3d4a2f6b6 100644
--- a/lang/sl.php
+++ b/lang/sl.php
@@ -337,7 +337,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Sporočilo mora biti dolgo vsaj %s znakov.',
'Feedback_ExceptionNoUrls' => 'Sporočilo ne sme vsebovati URL-ja, da ne bo padlo pod vsiljeno pošto.',
'Goals_Goals' => 'Cilji',
- 'Goals_Overview' => 'Pregled',
'Goals_GoalsOverview' => 'Pregled ciljev',
'Goals_GoalsManagement' => 'Upravljanje ciljev',
'Goals_GoalX' => 'Cilj %s',
diff --git a/lang/sq.php b/lang/sq.php
index e4374879de..a09c2f4250 100644
--- a/lang/sq.php
+++ b/lang/sq.php
@@ -463,7 +463,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Mesazhi duhet të jetë e pakta %s shenja i gjatë.',
'Feedback_ExceptionNoUrls' => 'Mesazhet nuk duhet të përmbajnë URL, kjo bëhet për shmangie mesazhesh të padëshiruar.',
'Goals_Goals' => 'Objektiva',
- 'Goals_Overview' => 'Përmbledhje',
'Goals_GoalsOverview' => 'Përmbledhje objektivash',
'Goals_GoalsManagement' => 'Administrim objektivash',
'Goals_ConversionsOverviewBy' => 'Përmbledhje shndërrimesh sipas llojit të vizitave',
diff --git a/lang/sr.php b/lang/sr.php
index 2613bf3a1a..d9a54de8cd 100644
--- a/lang/sr.php
+++ b/lang/sr.php
@@ -451,7 +451,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Poruka mora imati barem %s znakova.',
'Feedback_ExceptionNoUrls' => 'Poruka ne sme sadržati web adresu kako bismo izbegli neželjene reklamne poruke',
'Goals_Goals' => 'Ciljevi',
- 'Goals_Overview' => 'Pregled',
'Goals_GoalsOverview' => 'Pregled ciljeva',
'Goals_GoalsManagement' => 'Upravljanje ciljevima',
'Goals_ConversionsOverviewBy' => 'Pregled ispunjenja ciljeva po tipu posete',
diff --git a/lang/sv.php b/lang/sv.php
index c9ebb452bf..7e6ac89d5c 100644
--- a/lang/sv.php
+++ b/lang/sv.php
@@ -464,7 +464,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Meddelandet måste vara minst %s tecken långt.',
'Feedback_ExceptionNoUrls' => 'Meddelandet får inte innehålla länkar, detta för att undvika spam meddelanden.',
'Goals_Goals' => 'Mål',
- 'Goals_Overview' => 'Översikt',
'Goals_GoalsOverview' => 'Målöversikt',
'Goals_GoalsManagement' => 'Målhantering',
'Goals_ConversionsOverviewBy' => 'Konverteringar översikt per typ av besök',
diff --git a/lang/th.php b/lang/th.php
index b82c8e1ad5..61bb844cc5 100644
--- a/lang/th.php
+++ b/lang/th.php
@@ -456,7 +456,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'ข้อความต้องมีความยาวน้อยกว่าความยาวอักขระ %s',
'Feedback_ExceptionNoUrls' => 'ข้อความไม่สามารถประกอบด้วย URL เพื่อหลีกเลี่ยงข้อความสแปม',
'Goals_Goals' => 'เป้าหมาย',
- 'Goals_Overview' => 'ภาพรวม',
'Goals_GoalsOverview' => 'ภาพรวมของเป้าหมาย',
'Goals_GoalsManagement' => 'จัดการเป้าหมาย',
'Goals_ConversionsOverviewBy' => 'ภาพรวมการแปลงตามประเภทของการเข้าชม',
diff --git a/lang/tr.php b/lang/tr.php
index cec8c8b81e..e88fa47eb7 100644
--- a/lang/tr.php
+++ b/lang/tr.php
@@ -365,7 +365,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Mesajınız en az %s karakter uzunluğunda olmalı',
'Feedback_ExceptionNoUrls' => 'Spam mesajlardan kaçınmak için mesajınız URL içeremez.',
'Goals_Goals' => 'Goals',
- 'Goals_Overview' => 'Genel bakış',
'Goals_GoalsOverview' => 'Goals Genel bakış',
'Goals_GoalsManagement' => 'Goals Yönetimi',
'Goals_GoalX' => 'Hedef \'%s\'',
diff --git a/lang/uk.php b/lang/uk.php
index dfef688801..e41f2b9019 100644
--- a/lang/uk.php
+++ b/lang/uk.php
@@ -431,7 +431,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => 'Повідомлення має містити як мінімум %s символів.',
'Feedback_ExceptionNoUrls' => 'Щоб уникнути спаму, повідомлення не може містити URL.',
'Goals_Goals' => 'Цілі',
- 'Goals_Overview' => 'Огляд',
'Goals_GoalsOverview' => 'Огляд цілей',
'Goals_GoalsManagement' => 'Керування цілями',
'Goals_PluginDescription' => 'Створюйте цілі та переглядайте звіти про конвертсію ваших цілей: зміну в часі, прибуток на відвідувача, конверсію на джерело трафіку, по ключових словах, тощо...',
diff --git a/lang/zh-cn.php b/lang/zh-cn.php
index 9536285d6c..174afb3b8a 100644
--- a/lang/zh-cn.php
+++ b/lang/zh-cn.php
@@ -402,7 +402,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => '信息至少要有 %s 的字符以上。',
'Feedback_ExceptionNoUrls' => '信息不能包含一个网址,由此避免垃圾信息。',
'Goals_Goals' => '目标',
- 'Goals_Overview' => '概述',
'Goals_GoalsOverview' => '目标概述',
'Goals_GoalsManagement' => '目标管理',
'Goals_PluginDescription' => '建立目标然后查看关于您的目标转换率报表:时间的演变趋势、每次访问的收入、每个关键字等等。',
diff --git a/lang/zh-tw.php b/lang/zh-tw.php
index 9e82369b7b..5f02ff7d0f 100644
--- a/lang/zh-tw.php
+++ b/lang/zh-tw.php
@@ -414,7 +414,6 @@ $translations = array(
'Feedback_ExceptionBodyLength' => '訊息至少要有 %s 的字元以上。',
'Feedback_ExceptionNoUrls' => '訊息不能包含一個網址,藉此避免垃圾訊息。',
'Goals_Goals' => '目標',
- 'Goals_Overview' => '總覽',
'Goals_GoalsOverview' => '目標總覽',
'Goals_GoalsManagement' => '目標管理',
'Goals_PluginDescription' => '建立目標然後查看關於你的目標轉換率報表:時間的演變趨勢、每次訪問的收入、每個關鍵字等等。',
diff --git a/plugins/CoreHome/templates/broadcast.js b/plugins/CoreHome/templates/broadcast.js
index aba008a8bf..e9bec750f2 100644
--- a/plugins/CoreHome/templates/broadcast.js
+++ b/plugins/CoreHome/templates/broadcast.js
@@ -92,7 +92,8 @@ broadcast.propagateAjax = function (ajaxUrl)
// if the module is not 'Goals', we specifically unset the 'idGoal' parameter
// this is to ensure that the URLs are clean (and that clicks on graphs work as expected - they are broken with the extra parameter)
- if(broadcast.getParamValue('action', currentHashStr) != 'goalReport')
+ var action = broadcast.getParamValue('action', currentHashStr);
+ if( action != 'goalReport' && action != 'ecommerceReport')
{
currentHashStr = broadcast.updateParamValue('idGoal=', currentHashStr);
}
diff --git a/plugins/CoreHome/templates/datatable_footer.tpl b/plugins/CoreHome/templates/datatable_footer.tpl
index 20a8e3b060..3d0713b657 100644
--- a/plugins/CoreHome/templates/datatable_footer.tpl
+++ b/plugins/CoreHome/templates/datatable_footer.tpl
@@ -21,7 +21,6 @@
{/if}
<span class="loadingPiwik" style='display:none'><img src="themes/default/images/loading-blue.gif" /> {'General_LoadingData'|translate}</span>
-
{if $properties.show_footer_icons}
<div class="dataTableFooterIcons">
<div class="dataTableFooterWrap" var="{$javascriptVariablesToSet.viewDataTable}">
@@ -35,7 +34,7 @@
<a class="tableIcon" format="tableAllColumns" var="tableAllColumns"><img title="{'General_DisplayTableWithMoreMetrics'|translate}" src="themes/default/images/table_more.png" /></a>
{/if}
{if $properties.show_goals}
- <a class="tableIcon" format="tableGoals" var="tableGoals"><img title="{'General_DisplayTableWithGoalMetrics'|translate}" src="themes/default/images/goal.png" /></a>
+ <a class="tableIcon" format="tableGoals" var="tableGoals"><img title="{'General_DisplayTableWithGoalMetrics'|translate}" src="themes/default/images/{if $javascriptVariablesToSet.filter_only_display_idgoal=='ecommerceOrder'}ecommerceOrder.gif{else}goal.png{/if}" /></a>
{/if}
</span>
</div>
diff --git a/plugins/CoreHome/templates/menu.js b/plugins/CoreHome/templates/menu.js
index 792d07f0ec..fee6f568a1 100644
--- a/plugins/CoreHome/templates/menu.js
+++ b/plugins/CoreHome/templates/menu.js
@@ -81,7 +81,6 @@ menu.prototype =
var module = broadcast.getValueFromUrl("module",url);
var action = broadcast.getValueFromUrl("action",url);
var idGoal = broadcast.getValueFromUrl("idGoal",url);
-
var main_menu = ($(this).parent().attr("class").match(/nav/)) ? true : false;
if(main_menu)
{
@@ -103,11 +102,10 @@ menu.prototype =
activateMenu : function(module,action,idGoal)
{
-
// getting the right li is a little tricky since goals uses idGoal, and overview is index.
var $li = '';
// So, if module is Goals, idGoal is present, and action is not Index, must be one of the goals
- if(module == 'Goals' && idGoal != '' && action != 'index') {
+ if(module == 'Goals' && idGoal != '' && (action != 'index')) {
$li = $("#" + module + "_" + action + "_" + idGoal);
} else {
$li = $("#" + module + "_" + action);
diff --git a/plugins/Goals/API.php b/plugins/Goals/API.php
index 123b7fe3e4..69db030016 100644
--- a/plugins/Goals/API.php
+++ b/plugins/Goals/API.php
@@ -281,6 +281,17 @@ class Piwik_Goals_API
if(empty($columns))
{
$columns = Piwik_Goals::getGoalColumns($idGoal);
+ if($idGoal == 'ecommerceOrder')
+ {
+ $columns[] = 'avg_order_revenue';
+ }
+ }
+ if(in_array('avg_order_revenue', $columns)
+ && $idGoal == 'ecommerceOrder')
+ {
+ $columns[] = 'nb_conversions';
+ $columns[] = 'revenue';
+ $columns = array_unique($columns);
}
$columnsToSelect = array();
foreach($columns as &$columnName)
@@ -294,9 +305,41 @@ class Piwik_Goals_API
{
$dataTable->renameColumn($oldName, $columns[$id]);
}
+ if($idGoal == 'ecommerceOrder')
+ {
+ if($dataTable instanceof Piwik_DataTable_Array)
+ {
+ foreach($dataTable->getArray() as $row)
+ {
+ $this->enrichTable($row);
+ }
+ }
+ else
+ {
+ $this->enrichTable($dataTable);
+ }
+ }
return $dataTable;
}
+ protected function enrichTable($table)
+ {
+ $row = $table->getFirstRow();
+ if(!$row)
+ {
+ return;
+ }
+ // AVG order per visit
+ if(false !== $table->getColumn('avg_order_revenue'))
+ {
+ $conversions = $row->getColumn('nb_conversions');
+ if($conversions)
+ {
+ $row->setColumn('avg_order_revenue', round($row->getColumn('revenue') / $conversions, 2));
+ }
+ }
+ }
+
protected function getNumeric( $idSite, $period, $date, $segment, $toFetch )
{
Piwik::checkUserHasViewAccess( $idSite );
diff --git a/plugins/Goals/Controller.php b/plugins/Goals/Controller.php
index b00c8d1d0b..477d5458ab 100644
--- a/plugins/Goals/Controller.php
+++ b/plugins/Goals/Controller.php
@@ -22,6 +22,8 @@ class Piwik_Goals_Controller extends Piwik_Controller
'nb_conversions' => 'Goals_ColumnConversions',
'conversion_rate'=> 'General_ColumnConversionRate',
'revenue' => 'Goals_ColumnRevenue',
+ 'items' => 'General_PurchasedProducts',
+ 'avg_order_revenue' => 'General_AverageOrderValue',
);
private function formatConversionRate($conversionRate)
@@ -59,15 +61,35 @@ class Piwik_Goals_Controller extends Piwik_Controller
echo $view->render();
}
- protected function getGoalReportView()
+ public function ecommerceReport()
{
- $idGoal = Piwik_Common::getRequestVar('idGoal', null, 'int');
- if(!isset($this->goals[$idGoal]))
+ $view = $this->getGoalReportView($idGoal = 'ecommerceOrder');
+ $view->displayFullReport = true;
+ $view->goalDimensions = Piwik_Goals::getReportsWithGoalMetrics();
+ $view->ecommerce = true;
+
+ echo $view->render();
+ }
+
+ protected function getGoalReportView($idGoal = false)
+ {
+ if($idGoal === false)
{
- Piwik::redirectToModule('Goals', 'index', array('idGoal' => null));
+ $idGoal = Piwik_Common::getRequestVar('idGoal', null, 'string');
+ if(!isset($this->goals[$idGoal]))
+ {
+ Piwik::redirectToModule('Goals', 'index', array('idGoal' => null));
+ }
+ }
+ if($idGoal == 'ecommerceOrder')
+ {
+ $goalDefinition['name'] = Piwik_Translate('Goals_Ecommerce');
+ $goalDefinition['allow_multiple'] = true;
+ }
+ else
+ {
+ $goalDefinition = $this->goals[$idGoal];
}
- $goalDefinition = $this->goals[$idGoal];
-
$view = Piwik_View::factory('single_goal');
$this->setGeneralVariablesView($view);
$goal = $this->getMetricsForGoal($idGoal);
@@ -109,7 +131,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
$view->displayFullReport = false;
echo $view->render();
}
-
+
protected function getOverviewView()
{
$view = Piwik_View::factory('overview');
@@ -182,7 +204,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
if(empty($idGoal))
{
- $idGoal = Piwik_Common::getRequestVar('idGoal', false, 'int');
+ $idGoal = Piwik_Common::getRequestVar('idGoal', false, 'string');
}
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Goals.get');
$view->setParametersToModify(array('idGoal' => $idGoal));
@@ -248,7 +270,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
$topDimension[] = array (
'name' => $row->getColumn('label'),
'nb_conversions' => $conversions,
- 'conversion_rate' => $this->formatConversionRate($row->getColumn($columnConversionRate)),
+ 'conversion_rate' => $this->formatConversionRate($row->getColumn($columnConversionRate)),
'metadata' => $row->getMetadata(),
);
}
@@ -270,7 +292,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
{
$nbVisitsConverted = $nbConversions;
}
- return array (
+ $return = array (
'id' => $idGoal,
'nb_conversions' => $nbConversions,
'nb_visits_converted' => $nbVisitsConverted,
@@ -280,5 +302,16 @@ class Piwik_Goals_Controller extends Piwik_Controller
'urlSparklineConversionRate' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('conversion_rate'), 'idGoal' => $idGoal)),
'urlSparklineRevenue' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('revenue'), 'idGoal' => $idGoal)),
);
+
+ if($idGoal == 'ecommerceOrder')
+ {
+ $return = array_merge($return, array(
+ 'items' => $dataRow->getColumn('items'),
+ 'avg_order_revenue' => $dataRow->getColumn('avg_order_revenue'),
+ 'urlSparklinePurchasedProducts' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('items'), 'idGoal' => $idGoal)),
+ 'urlSparklineAverageOrderValue' => $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_order_revenue'), 'idGoal' => $idGoal)),
+ ));
+ }
+ return $return;
}
}
diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php
index c4faecec85..167b44dc2a 100644
--- a/plugins/Goals/Goals.php
+++ b/plugins/Goals/Goals.php
@@ -196,15 +196,35 @@ class Piwik_Goals extends Piwik_Plugin
$idSite = Piwik_Common::getRequestVar('idSite', null, 'int');
$goals = Piwik_Tracker_GoalManager::getGoalDefinitions($idSite);
$mainGoalMenu = $this->getGoalCategoryName($idSite);
+ $site = new Piwik_Site($idSite);
if(count($goals)==0)
{
- Piwik_AddMenu($mainGoalMenu, '', array('module' => 'Goals', 'action' => 'addNewGoal'), true, 25);
+ Piwik_AddMenu($mainGoalMenu, '', array(
+ 'module' => 'Goals',
+ 'action' => ($site->isEcommerceEnabled() ? 'ecommerceReport' : 'addNewGoal'),
+ 'idGoal' => ($site->isEcommerceEnabled() ? 'ecommerceOrder' : null)),
+ true,
+ 25);
+ if($site->isEcommerceEnabled())
+ {
+ Piwik_AddMenu($mainGoalMenu, 'Goals_Ecommerce', array('module' => 'Goals', 'action' => 'ecommerceReport', 'idGoal' => 'ecommerceOrder'), true, 1);
+ }
Piwik_AddMenu($mainGoalMenu, 'Goals_AddNewGoal', array('module' => 'Goals', 'action' => 'addNewGoal'));
}
else
{
- Piwik_AddMenu($mainGoalMenu, '', array('module' => 'Goals', 'action' => 'index'), true, 25);
- Piwik_AddMenu($mainGoalMenu, 'Goals_Overview', array('module' => 'Goals', 'action' => 'index'), true, 1);
+ Piwik_AddMenu($mainGoalMenu, '', array(
+ 'module' => 'Goals',
+ 'action' => ($site->isEcommerceEnabled() ? 'ecommerceReport' : 'index'),
+ 'idGoal' => ($site->isEcommerceEnabled() ? 'ecommerceOrder' : null)),
+ true,
+ 25);
+
+ if($site->isEcommerceEnabled())
+ {
+ Piwik_AddMenu($mainGoalMenu, 'Goals_Ecommerce', array('module' => 'Goals', 'action' => 'ecommerceReport', 'idGoal' => 'ecommerceOrder'), true, 1);
+ }
+ Piwik_AddMenu($mainGoalMenu, 'Goals_GoalsOverview', array('module' => 'Goals', 'action' => 'index'), true, 2);
foreach($goals as $goal)
{
Piwik_AddMenu($mainGoalMenu, str_replace('%', '%%', Piwik_TranslationWriter::clean($goal['name'])), array('module' => 'Goals', 'action' => 'goalReport', 'idGoal' => $goal['idgoal']));
@@ -372,7 +392,6 @@ class Piwik_Goals extends Piwik_Plugin
$recordName = self::getRecordName($metricName, $idgoal);
$archiveProcessing->insertNumericRecord($recordName, $value);
}
-
$conversion_rate = $this->getConversionRate($values[Piwik_Archive::INDEX_GOAL_NB_VISITS_CONVERTED], $archiveProcessing);
$recordName = self::getRecordName('conversion_rate', $idgoal);
$archiveProcessing->insertNumericRecord($recordName, $conversion_rate);
diff --git a/plugins/Goals/templates/title_and_evolution_graph.tpl b/plugins/Goals/templates/title_and_evolution_graph.tpl
index 9df94382f6..be0919b448 100644
--- a/plugins/Goals/templates/title_and_evolution_graph.tpl
+++ b/plugins/Goals/templates/title_and_evolution_graph.tpl
@@ -7,7 +7,9 @@
<div id='leftcolumn'>
<div class="sparkline">{sparkline src=$urlSparklineConversions}
- {'Goals_Conversions'|translate:"<strong>$nb_conversions</strong>"}
+ {if $ecommerce} <strong>{$nb_conversions}</strong> {'General_EcommerceOrders'|translate}
+ {else}{'Goals_Conversions'|translate:"<strong>$nb_conversions</strong>"}
+ {/if}
{if isset($goalAllowMultipleConversionsPerVisit) && $goalAllowMultipleConversionsPerVisit}
({'VisitsSummary_NbVisits'|translate:"<strong>$nb_visits_converted</strong>"})
{/if}
@@ -15,12 +17,29 @@
{if $revenue != 0 }
<div class="sparkline">{sparkline src=$urlSparklineRevenue}
{assign var=revenue value=$revenue|money:$idSite}
- {'Goals_OverallRevenue'|translate:"<strong>$revenue</strong>"}</div>
+ {if $ecommerce}<strong>{$revenue}</strong> {'General_TotalRevenue'|translate}
+ {else}{'Goals_OverallRevenue'|translate:"<strong>$revenue</strong>"}
+ {/if}
+ </div>
+ {/if}
+ {if isset($ecommerce)}
+ <div class="sparkline">{sparkline src=$urlSparklineAverageOrderValue}
+ <strong>{$avg_order_revenue|money:$idSite}</strong> {'General_AverageOrderValue'|translate}</div>
{/if}
+
</div>
<div id='rightcolumn'>
<div class="sparkline">{sparkline src=$urlSparklineConversionRate}
- {'Goals_OverallConversionRate'|translate:"<strong>$conversion_rate</strong>"}</div>
+ {if $ecommerce}{capture assign='ecommerceOrdersText'}{'General_EcommerceOrders'|translate}{/capture}
+ {'Goals_ConversionRate'|translate:"<strong>$conversion_rate</strong> $ecommerceOrdersText"}
+ {else}
+ {'Goals_OverallConversionRate'|translate:"<strong>$conversion_rate</strong>"}
+ {/if}
+ </div>
+ {if isset($ecommerce)}
+ <div class="sparkline">{sparkline src=$urlSparklinePurchasedProducts}
+ <strong>{$items}</strong> {'General_PurchasedProducts'|translate}</div>
+ {/if}
</div>
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index 0986b500f1..ac163fbc33 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -165,13 +165,10 @@ class Piwik_VisitTime extends Piwik_Plugin
$goalByServerTime = array();
while($row = $query->fetch())
{
- $goalByServerTime[$row['label']][$row['idgoal']] = $archiveProcessing->getGoalRowFromQueryRow($row);
- }
- $goalByServerTime = $this->convertServerTimeToLocalTimezone($goalByServerTime, $archiveProcessing);
- foreach($goalByServerTime as $hour => $goals)
- {
- $this->interestByServerTime[$hour][Piwik_Archive::INDEX_GOALS] = $goals;
+ if(!isset($this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']])) $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']] = $archiveProcessing->getNewGoalRow($row['idgoal']);
+ $archiveProcessing->updateGoalStats($row, $this->interestByServerTime[$row['label']][Piwik_Archive::INDEX_GOALS][$row['idgoal']]);
}
+ $goalByServerTime = $this->convertServerTimeToLocalTimezone($this->interestByServerTime, $archiveProcessing);
$archiveProcessing->enrichConversionsByLabelArray($this->interestByServerTime);
}
diff --git a/tests/integration/Main.test.php b/tests/integration/Main.test.php
index 6c0fbfcce9..a34f25cf03 100644
--- a/tests/integration/Main.test.php
+++ b/tests/integration/Main.test.php
@@ -159,7 +159,7 @@ class Test_Piwik_Integration_Main extends Test_Integration
// This hack allows the API proxy to let us generate example URLs for the ignored functions
Piwik_API_Proxy::getInstance()->hideIgnoredFunctions = false;
- $this->setApiToCall( array('CustomVariables.getCustomVariables', 'Live.getLastVisitsDetails', 'UserCountry', 'API.getProcessedReport', 'Goals.get', 'Goals.getConversions', 'Goals.getItemsSku', 'Goals.getItemsName', 'Goals.getItemsCategory' ) );
+ $this->setApiToCall( array('VisitTime', 'CustomVariables.getCustomVariables', 'Live.getLastVisitsDetails', 'UserCountry', 'API.getProcessedReport', 'Goals.get', 'Goals.getConversions', 'Goals.getItemsSku', 'Goals.getItemsName', 'Goals.getItemsCategory' ) );
$this->callGetApiCompareOutput(__FUNCTION__, 'xml', $idSite, $dateTime, $periods = array('day'));
$this->setApiToCall( array('Goals.get', 'Goals.getItemsSku', 'Goals.getItemsName', 'Goals.getItemsCategory' ) );
$this->callGetApiCompareOutput(__FUNCTION__, 'xml', $idSite, $dateTime, $periods = array('week'));
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
index a34da03d5b..736a024b0e 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -122,7 +122,7 @@
<row idgoal='1'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>42.00</revenue>
+ <revenue>42</revenue>
</row>
</goals>
<nb_conversions>1</nb_conversions>
@@ -140,7 +140,7 @@
<row idgoal='2'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>1.00</revenue>
+ <revenue>1</revenue>
</row>
</goals>
<nb_conversions>1</nb_conversions>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
index a34da03d5b..736a024b0e 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -122,7 +122,7 @@
<row idgoal='1'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>42.00</revenue>
+ <revenue>42</revenue>
</row>
</goals>
<nb_conversions>1</nb_conversions>
@@ -140,7 +140,7 @@
<row idgoal='2'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>1.00</revenue>
+ <revenue>1</revenue>
</row>
</goals>
<nb_conversions>1</nb_conversions>
diff --git a/tests/integration/expected/test_apiGetReportMetadata_year__LanguagesManager.getTranslationsForLanguage.xml b/tests/integration/expected/test_apiGetReportMetadata_year__LanguagesManager.getTranslationsForLanguage.xml
index 00249a7727..e3b402ecc6 100644
--- a/tests/integration/expected/test_apiGetReportMetadata_year__LanguagesManager.getTranslationsForLanguage.xml
+++ b/tests/integration/expected/test_apiGetReportMetadata_year__LanguagesManager.getTranslationsForLanguage.xml
@@ -1853,10 +1853,6 @@
<value>Objectifs</value>
</row>
<row>
- <label>Goals_Overview</label>
- <value>Vue d'ensemble</value>
- </row>
- <row>
<label>Goals_GoalsOverview</label>
<value>Vue d'ensemble des Objectifs</value>
</row>
diff --git a/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_day.xml b/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_day.xml
index e2457ce0b6..35b8145664 100644
--- a/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_day.xml
+++ b/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_day.xml
@@ -9,4 +9,5 @@
<revenue_shipping>100.11</revenue_shipping>
<revenue_discount>666</revenue_discount>
<items>3</items>
+ <avg_order_revenue>1555.56</avg_order_revenue>
</result> \ No newline at end of file
diff --git a/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_week.xml b/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_week.xml
index 5c6a2acc82..db1835bc9d 100644
--- a/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_week.xml
+++ b/tests/integration/expected/test_ecommerceOrderWithItems_GoalOrder__Goals.get_week.xml
@@ -9,4 +9,5 @@
<revenue_shipping>120.11</revenue_shipping>
<revenue_discount>686</revenue_discount>
<items>5</items>
+ <avg_order_revenue>3337.78</avg_order_revenue>
</result> \ No newline at end of file
diff --git a/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml
new file mode 100644
index 0000000000..08b4f90b5e
--- /dev/null
+++ b/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>0h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>1h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>2h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>3h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>4h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>5h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>6h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>7h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>8h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>9h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>10h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>11h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>12h</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>3</nb_visits>
+ <nb_actions>10</nb_actions>
+ <max_actions>5</max_actions>
+ <sum_visit_length>5400</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>2</nb_visits_converted>
+ </row>
+ <row>
+ <label>13h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>14h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>15h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>16h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>17h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>18h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>19h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>20h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>21h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>22h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>23h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml
new file mode 100644
index 0000000000..f2142f8c5f
--- /dev/null
+++ b/tests/integration/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>0h</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>1</nb_visits>
+ <nb_actions>3</nb_actions>
+ <max_actions>3</max_actions>
+ <sum_visit_length>720</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>10</revenue>
+ </row>
+ </goals>
+ <nb_conversions>1</nb_conversions>
+ <revenue>10</revenue>
+ </row>
+ <row>
+ <label>1h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>2h</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>1</nb_visits>
+ <nb_actions>5</nb_actions>
+ <max_actions>5</max_actions>
+ <sum_visit_length>3960</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <goals>
+ <row idgoal='ecommerceAbandonedCart'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>2510.11</revenue>
+ <items>4</items>
+ </row>
+ <row idgoal='ecommerceOrder'>
+ <nb_conversions>2</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>3111.11</revenue>
+ <revenue_subtotal>2500</revenue_subtotal>
+ <revenue_tax>511</revenue_tax>
+ <revenue_shipping>100.11</revenue_shipping>
+ <revenue_discount>666</revenue_discount>
+ <items>3</items>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>3111.11</revenue>
+ </row>
+ <row>
+ <label>3h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>4h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>5h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>6h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>7h</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>1</nb_visits>
+ <nb_actions>2</nb_actions>
+ <max_actions>2</max_actions>
+ <sum_visit_length>720</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <goals>
+ <row idgoal='ecommerceAbandonedCart'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>2510.11</revenue>
+ <items>4</items>
+ </row>
+ </goals>
+ <nb_conversions>0</nb_conversions>
+ <revenue>0</revenue>
+ </row>
+ <row>
+ <label>8h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>9h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>10h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>11h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>12h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>13h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>14h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>15h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>16h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>17h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>18h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>19h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>20h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>21h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>22h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+ <row>
+ <label>23h</label>
+ <nb_uniq_visitors>0</nb_uniq_visitors>
+ <nb_visits>0</nb_visits>
+ <nb_actions>0</nb_actions>
+ <max_actions>0</max_actions>
+ <sum_visit_length>0</sum_visit_length>
+ <bounce_count>0</bounce_count>
+ <nb_visits_converted>0</nb_visits_converted>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/integration/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/integration/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
index bef4ab0879..11fab88dc8 100644
--- a/tests/integration/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/integration/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -12,12 +12,12 @@
<row idgoal='1'>
<nb_conversions>2</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>666.00</revenue>
+ <revenue>666</revenue>
</row>
<row idgoal='2'>
<nb_conversions>2</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>666.00</revenue>
+ <revenue>666</revenue>
</row>
</goals>
<nb_conversions>4</nb_conversions>