// Added comparison to the dashboard
This commit is contained in:
@@ -29,6 +29,11 @@ if (!defined('_PS_VERSION_'))
|
||||
|
||||
class Dashtrends extends Module
|
||||
{
|
||||
protected $dashboard_data;
|
||||
protected $dashboard_data_compare;
|
||||
protected $dashboard_data_sum;
|
||||
protected $dashboard_data_sum_compare;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->name = 'dashtrends';
|
||||
@@ -57,25 +62,8 @@ class Dashtrends extends Module
|
||||
{
|
||||
return $this->display(__FILE__, 'dashboard_zone_two.tpl');
|
||||
}
|
||||
|
||||
protected $dashboard_data = array(
|
||||
'sales' => array(),
|
||||
'orders' => array(),
|
||||
'average_cart_value' => array(),
|
||||
'visits' => array(),
|
||||
'conversion_rate' => array(),
|
||||
'net_profits' => array()
|
||||
);
|
||||
protected $dashboard_data_sum = array(
|
||||
'sales' => 0,
|
||||
'orders' => 0,
|
||||
'average_cart_value' => 0,
|
||||
'visits' => 0,
|
||||
'conversion_rate' => 0,
|
||||
'net_profits' => 0
|
||||
);
|
||||
|
||||
public function hookDashboardData($params)
|
||||
|
||||
protected function getData($date_from, $date_to)
|
||||
{
|
||||
// We need the following figures to calculate our stats
|
||||
$tmp_data = array(
|
||||
@@ -93,7 +81,7 @@ class Dashtrends extends Module
|
||||
$gapi = Module::isInstalled('gapi') ? Module::getInstanceByName('gapi') : false;
|
||||
if (Validate::isLoadedObject($gapi) && $gapi->isConfigured())
|
||||
{
|
||||
if ($result = $gapi->requestReportData('ga:date', 'ga:visits', $params['date_from'], $params['date_to'].' 23:59:59', null, null, 1, 9999))
|
||||
if ($result = $gapi->requestReportData('ga:date', 'ga:visits', $date_from.' 00:00:00', $date_to.' 23:59:59', null, null, 1, 9999))
|
||||
foreach ($result as $row)
|
||||
$tmp_data['visits_score'][strtotime(preg_replace('/^([0-9]{4})([0-9]{2})([0-9]{2})$/', '$1-$2-$3', $row['dimensions']['date']))] = $row['metrics']['visits'];
|
||||
}
|
||||
@@ -104,7 +92,7 @@ class Dashtrends extends Module
|
||||
LEFT(`date_add`, 10) as date,
|
||||
COUNT(*) as visits_score
|
||||
FROM `'._DB_PREFIX_.'connections`
|
||||
WHERE `date_add` BETWEEN "'.pSQL($params['date_from']).'" AND "'.pSQL($params['date_to'].' 23:59:59').'"
|
||||
WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to.' 23:59:59').'"
|
||||
'.Shop::addSqlRestriction(false).'
|
||||
GROUP BY LEFT(`date_add`, 10)');
|
||||
foreach ($result as $row)
|
||||
@@ -118,7 +106,7 @@ class Dashtrends extends Module
|
||||
SUM(`total_paid_tax_excl` / `conversion_rate`) as total_paid_tax_excl,
|
||||
SUM(`total_discounts_tax_excl` / `conversion_rate`) as total_discounts_tax_excl
|
||||
FROM `'._DB_PREFIX_.'orders`
|
||||
WHERE `invoice_date` BETWEEN "'.pSQL($params['date_from']).'" AND "'.pSQL($params['date_to'].' 23:59:59').'"
|
||||
WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to.' 23:59:59').'"
|
||||
'.Shop::addSqlRestriction(Shop::SHARE_ORDER).'
|
||||
GROUP BY LEFT(`invoice_date`, 10)');
|
||||
foreach ($result as $row)
|
||||
@@ -132,7 +120,7 @@ class Dashtrends extends Module
|
||||
SUM(os.`shipping_cost_amount` / o.`conversion_rate`) as total_credit_shipping_tax_excl
|
||||
FROM `'._DB_PREFIX_.'orders` o
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_slip` os ON o.id_order = os.id_order
|
||||
WHERE os.`date_add` BETWEEN "'.pSQL($params['date_from']).'" AND "'.pSQL($params['date_to'].' 23:59:59').'"
|
||||
WHERE os.`date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to.' 23:59:59').'"
|
||||
'.Shop::addSqlRestriction(Shop::SHARE_ORDER, 'o').'
|
||||
GROUP BY LEFT(os.`date_add`, 10)');
|
||||
foreach ($result as $row)
|
||||
@@ -146,70 +134,138 @@ class Dashtrends extends Module
|
||||
SUM(od.`product_quantity` * od.`purchase_supplier_price` / `conversion_rate`) as total_purchase_price
|
||||
FROM `'._DB_PREFIX_.'orders` o
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order
|
||||
WHERE `invoice_date` BETWEEN "'.pSQL($params['date_from']).'" AND "'.pSQL($params['date_to'].' 23:59:59').'"
|
||||
WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to.' 23:59:59').'"
|
||||
'.Shop::addSqlRestriction(Shop::SHARE_ORDER, 'o').'
|
||||
GROUP BY LEFT(`invoice_date`, 10)');
|
||||
foreach ($result as $row)
|
||||
foreach (array('total_product_price_tax_excl', 'total_purchase_price') as $var)
|
||||
$tmp_data[$var][strtotime($row['date'])] = $row[$var];
|
||||
|
||||
$from = max(strtotime(_PS_CREATION_DATE_.' 00:00:00'), strtotime($params['date_from'].' 00:00:00'));
|
||||
$to = min(time(), strtotime($params['date_to'].' 23:59:59'));
|
||||
return $tmp_data;
|
||||
}
|
||||
|
||||
protected function refineData($date_from, $date_to, $gross_data)
|
||||
{
|
||||
$refined_data = array(
|
||||
'sales' => array(),
|
||||
'orders' => array(),
|
||||
'average_cart_value' => array(),
|
||||
'visits' => array(),
|
||||
'conversion_rate' => array(),
|
||||
'net_profits' => array()
|
||||
);
|
||||
$from = max(strtotime(_PS_CREATION_DATE_.' 00:00:00'), strtotime($date_from.' 00:00:00'));
|
||||
$to = min(time(), strtotime($date_to.' 23:59:59'));
|
||||
for ($date = $from; $date <= $to; $date = strtotime('+1 day', $date))
|
||||
{
|
||||
$this->dashboard_data['sales'][$date] = 0;
|
||||
if (isset($tmp_data['total_paid_tax_excl'][$date]))
|
||||
$this->dashboard_data['sales'][$date] += $tmp_data['total_paid_tax_excl'][$date];
|
||||
if (isset($tmp_data['total_credit_tax_excl'][$date]))
|
||||
$this->dashboard_data['sales'][$date] -= $tmp_data['total_credit_tax_excl'][$date];
|
||||
if (isset($tmp_data['total_credit_shipping_tax_excl'][$date]))
|
||||
$this->dashboard_data['sales'][$date] -= $tmp_data['total_credit_shipping_tax_excl'][$date];
|
||||
$refined_data['sales'][$date] = 0;
|
||||
if (isset($gross_data['total_paid_tax_excl'][$date]))
|
||||
$refined_data['sales'][$date] += $gross_data['total_paid_tax_excl'][$date];
|
||||
if (isset($gross_data['total_credit_tax_excl'][$date]))
|
||||
$refined_data['sales'][$date] -= $gross_data['total_credit_tax_excl'][$date];
|
||||
if (isset($gross_data['total_credit_shipping_tax_excl'][$date]))
|
||||
$refined_data['sales'][$date] -= $gross_data['total_credit_shipping_tax_excl'][$date];
|
||||
|
||||
$this->dashboard_data['orders'][$date] = isset($tmp_data['orders_score'][$date]) ? $tmp_data['orders_score'][$date] : 0;
|
||||
$refined_data['orders'][$date] = isset($gross_data['orders_score'][$date]) ? $gross_data['orders_score'][$date] : 0;
|
||||
|
||||
$this->dashboard_data['average_cart_value'][$date] = $this->dashboard_data['orders'][$date] ? $this->dashboard_data['sales'][$date] / $this->dashboard_data['orders'][$date] : 0;
|
||||
$refined_data['average_cart_value'][$date] = $refined_data['orders'][$date] ? $refined_data['sales'][$date] / $refined_data['orders'][$date] : 0;
|
||||
|
||||
$this->dashboard_data['visits'][$date] = isset($tmp_data['visits_score'][$date]) ? $tmp_data['visits_score'][$date] : 0;
|
||||
$refined_data['visits'][$date] = isset($gross_data['visits_score'][$date]) ? $gross_data['visits_score'][$date] : 0;
|
||||
|
||||
$this->dashboard_data['conversion_rate'][$date] = $this->dashboard_data['visits'][$date] ? $this->dashboard_data['orders'][$date] / $this->dashboard_data['visits'][$date] : 0;
|
||||
$refined_data['conversion_rate'][$date] = $refined_data['visits'][$date] ? $refined_data['orders'][$date] / $refined_data['visits'][$date] : 0;
|
||||
|
||||
$this->dashboard_data['net_profits'][$date] = 0;
|
||||
if (isset($tmp_data['total_product_price_tax_excl'][$date]))
|
||||
$this->dashboard_data['net_profits'][$date] += $tmp_data['total_product_price_tax_excl'][$date];
|
||||
if (isset($tmp_data['total_discounts_tax_excl'][$date]))
|
||||
$this->dashboard_data['net_profits'][$date] -= $tmp_data['total_discounts_tax_excl'][$date];
|
||||
if (isset($tmp_data['total_purchase_price'][$date]))
|
||||
$this->dashboard_data['net_profits'][$date] -= $tmp_data['total_purchase_price'][$date];
|
||||
if (isset($tmp_data['total_credit_tax_excl'][$date]))
|
||||
$this->dashboard_data['net_profits'][$date] -= $tmp_data['total_credit_tax_excl'][$date];
|
||||
$refined_data['net_profits'][$date] = 0;
|
||||
if (isset($gross_data['total_product_price_tax_excl'][$date]))
|
||||
$refined_data['net_profits'][$date] += $gross_data['total_product_price_tax_excl'][$date];
|
||||
if (isset($gross_data['total_discounts_tax_excl'][$date]))
|
||||
$refined_data['net_profits'][$date] -= $gross_data['total_discounts_tax_excl'][$date];
|
||||
if (isset($gross_data['total_purchase_price'][$date]))
|
||||
$refined_data['net_profits'][$date] -= $gross_data['total_purchase_price'][$date];
|
||||
if (isset($gross_data['total_credit_tax_excl'][$date]))
|
||||
$refined_data['net_profits'][$date] -= $gross_data['total_credit_tax_excl'][$date];
|
||||
}
|
||||
$this->dashboard_data_sum['sales'] = array_sum($this->dashboard_data['sales']);
|
||||
$this->dashboard_data_sum['orders'] = array_sum($this->dashboard_data['orders']);
|
||||
$this->dashboard_data_sum['average_cart_value'] = $this->dashboard_data_sum['sales'] ? $this->dashboard_data_sum['sales'] / $this->dashboard_data_sum['orders'] : 0;
|
||||
$this->dashboard_data_sum['visits'] = array_sum($this->dashboard_data['visits']);
|
||||
$this->dashboard_data_sum['conversion_rate'] = $this->dashboard_data_sum['visits'] ? $this->dashboard_data_sum['orders'] / $this->dashboard_data_sum['visits'] : 0;
|
||||
$this->dashboard_data_sum['net_profits'] = array_sum($this->dashboard_data['net_profits']);
|
||||
return $refined_data;
|
||||
}
|
||||
|
||||
protected function addupData($data)
|
||||
{
|
||||
$summing = array(
|
||||
'sales' => 0,
|
||||
'orders' => 0,
|
||||
'average_cart_value' => 0,
|
||||
'visits' => 0,
|
||||
'conversion_rate' => 0,
|
||||
'net_profits' => 0
|
||||
);
|
||||
|
||||
$summing['sales'] = array_sum($data['sales']);
|
||||
$summing['orders'] = array_sum($data['orders']);
|
||||
$summing['average_cart_value'] = $summing['sales'] ? $summing['sales'] / $summing['orders'] : 0;
|
||||
$summing['visits'] = array_sum($data['visits']);
|
||||
$summing['conversion_rate'] = $summing['visits'] ? $summing['orders'] / $summing['visits'] : 0;
|
||||
$summing['net_profits'] = array_sum($data['net_profits']);
|
||||
return $summing;
|
||||
}
|
||||
|
||||
protected function compareData($data1, $data2)
|
||||
{
|
||||
return array(
|
||||
'sales_score_trends' => array(
|
||||
'way' => ($data1['sales'] == $data2['sales'] ? 'right' : ($data1['sales'] > $data2['sales'] ? 'up' : 'down')),
|
||||
'value' => ($data1['sales'] > $data2['sales'] ? '+' : '').($data2['sales'] ? round(100 * $data1['sales'] / $data2['sales'] - 100, 2).'%' : '∞')
|
||||
),
|
||||
'orders_score_trends' => array(
|
||||
'way' => ($data1['orders'] == $data2['orders'] ? 'right' : ($data1['orders'] > $data2['orders'] ? 'up' : 'down')),
|
||||
'value' => ($data1['orders'] > $data2['orders'] ? '+' : '').($data2['orders'] ? round(100 * $data1['orders'] / $data2['orders'] - 100, 2).'%' : '∞')
|
||||
),
|
||||
'cart_value_score_trends' => array(
|
||||
'way' => ($data1['average_cart_value'] == $data2['average_cart_value'] ? 'right' : ($data1['average_cart_value'] > $data2['average_cart_value'] ? 'up' : 'down')),
|
||||
'value' => ($data1['average_cart_value'] > $data2['average_cart_value'] ? '+' : '').($data2['average_cart_value'] ? round(100 * $data1['average_cart_value'] / $data2['average_cart_value'] - 100, 2).'%' : '∞')
|
||||
),
|
||||
'visits_score_trends' => array(
|
||||
'way' => ($data1['visits'] == $data2['visits'] ? 'right' : ($data1['visits'] > $data2['visits'] ? 'up' : 'down')),
|
||||
'value' => ($data1['visits'] > $data2['visits'] ? '+' : '').($data2['visits'] ? round(100 * $data1['visits'] / $data2['visits'] - 100, 2).'%' : '+∞')
|
||||
),
|
||||
'conversion_rate_score_trends' => array(
|
||||
'way' => ($data1['conversion_rate'] == $data2['conversion_rate'] ? 'right' : ($data1['conversion_rate'] > $data2['conversion_rate'] ? 'up' : 'down')),
|
||||
'value' => ($data1['conversion_rate'] > $data2['conversion_rate'] ? '+' : '').($data2['conversion_rate'] ? round($data1['visits_score'] - $data2['visits_score'], 2).$this->l('pts') : '∞')
|
||||
),
|
||||
'net_profits_score_trends' => array(
|
||||
'way' => ($data1['net_profits'] == $data2['net_profits'] ? 'right' : ($data1['net_profits'] > $data2['net_profits'] ? 'up' : 'down')),
|
||||
'value' => ($data1['net_profits'] > $data2['net_profits'] ? '+' : '').($data2['net_profits'] ? round(100 * $data1['net_profits'] / $data2['net_profits'] - 100, 2).'%' : '∞')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function hookDashboardData($params)
|
||||
{
|
||||
// Artificially remove the decimals in order to get a cleaner Dashboard
|
||||
$currency = clone $this->context->currency;
|
||||
$currency->decimals = 0;
|
||||
|
||||
// Retrieve, refine and add up data for the selected period
|
||||
$tmp_data = $this->getData($params['date_from'], $params['date_to']);
|
||||
$this->dashboard_data = $this->refineData($params['date_from'], $params['date_to'], $tmp_data);
|
||||
$this->dashboard_data_sum = $this->addupData($this->dashboard_data);
|
||||
|
||||
// Retrieve, refine and add up data for the comparison period
|
||||
$tmp_data_compare = $this->getData($params['compare_from'], $params['compare_to']);
|
||||
$this->dashboard_data_compare = $this->refineData($params['compare_from'], $params['compare_to'], $tmp_data_compare);
|
||||
$this->dashboard_data_sum_compare = $this->addupData($this->dashboard_data_compare);
|
||||
|
||||
$data_trends = $this->compareData($this->dashboard_data_sum, $this->dashboard_data_sum_compare);
|
||||
|
||||
return array(
|
||||
'data_value' => array(
|
||||
'sales_score' => Tools::displayPrice(round($this->dashboard_data_sum['sales'])),
|
||||
'sales_score' => Tools::displayPrice(round($this->dashboard_data_sum['sales']), $currency),
|
||||
'orders_score' => $this->dashboard_data_sum['orders'],
|
||||
'cart_value_score' => Tools::displayPrice($this->dashboard_data_sum['average_cart_value']),
|
||||
'cart_value_score' => Tools::displayPrice($this->dashboard_data_sum['average_cart_value'], $currency),
|
||||
'visits_score' => $this->dashboard_data_sum['visits'],
|
||||
'convertion_rate_score' => round(100 * $this->dashboard_data_sum['conversion_rate'], 2),
|
||||
'net_profits_score' => Tools::displayPrice(round($this->dashboard_data_sum['net_profits'])),
|
||||
),
|
||||
'data_trends' => array(
|
||||
'sales_score_trends' => array('way' => 'up', 'value' => 0.42),
|
||||
'orders_score_trends' => array('way' => 'down', 'value' => 0.42),
|
||||
'cart_value_score_trends' => array('way' => 'up', 'value' => 0.42),
|
||||
'visits_score_trends' => array('way' => 'down', 'value' => 0.42),
|
||||
'convertion_rate_score_trends' => array('way' => 'up', 'value' => 0.42),
|
||||
'net_profits_score_trends' => array('way' => 'up', 'value' => 0.42)
|
||||
),
|
||||
'data_chart' => array(
|
||||
'dash_trends_chart1' => $this->getChartTrends(),
|
||||
'conversion_rate_score' => round(100 * $this->dashboard_data_sum['conversion_rate'], 2).'%',
|
||||
'net_profits_score' => Tools::displayPrice(round($this->dashboard_data_sum['net_profits']), $currency),
|
||||
),
|
||||
'data_trends' => $data_trends,
|
||||
'data_chart' => array('dash_trends_chart1' => $this->getChartTrends()),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user