[*] BO : Connected the first KPIs to real data

This commit is contained in:
Damien Metzger
2013-09-16 18:40:34 +02:00
parent 80b6d5a570
commit 8934f9c7ed
10 changed files with 251 additions and 13 deletions
@@ -39,18 +39,6 @@
<span class="title">Net Profit per visitor <br/><small>30 days</small></span>
<span class="value">$2.12</span>
</div>
<div id="box-income" class="col-lg-3 box-stats color3">
<i class="icon-money"></i>
<span class="title">Average order value <br/><small>30 days</small></span>
<span class="value">$78.36</span>
</div>
<div id="box-messages" class="col-lg-3 box-stats color2">
<i class="icon-shopping-cart"></i>
<span class="title">Carts abandoned <br/><small>Today</small></span>
<span class="value">14</span>
</div>
</div>
</div>
@@ -0,0 +1,44 @@
{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<div id="{$id|escape}" class="col-lg-3 box-stats {$color|escape}" >
<i class="{$icon|escape}"></i>
<span class="title">{$title|escape}<br /><small>{$subtitle|escape}</small></span>
<span class="value">{$value|escape}</span>
</div>
{if $source != ''}
<script>
$.ajax({
url: '{$source|addslashes}' + '&rand=' + new Date().getTime(),
dataType: 'json',
type: 'GET',
cache: false,
headers: { 'cache-control': 'no-cache' },
success: function(jsonData){
if (!jsonData.has_errors)
$('#{$id|addslashes} .value').html(jsonData.value);
}
});
</script>
{/if}
@@ -0,0 +1,31 @@
{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<div class="panel">
<div class="row">
{foreach $kpis as $kpi}
{$kpi}
{/foreach}
</div>
</div>
+4
View File
@@ -362,6 +362,10 @@
'HelperFormCore' => 'classes/helper/HelperForm.php',
'HelperHelpAccess' => '',
'HelperHelpAccessCore' => 'classes/helper/HelperHelpAccess.php',
'HelperKpi' => '',
'HelperKpiCore' => 'classes/helper/HelperKpi.php',
'HelperKpiRow' => '',
'HelperKpiRowCore' => 'classes/helper/HelperKpiRow.php',
'HelperList' => '',
'HelperListCore' => 'classes/helper/HelperList.php',
'HelperOptions' => '',
+5 -1
View File
@@ -1522,6 +1522,7 @@ class AdminControllerCore extends Controller
elseif (!$this->ajax)
{
$this->content .= $this->renderModulesList();
$this->content .= $this->renderKpis();
$this->content .= $this->renderList();
$this->content .= $this->renderOptions();
@@ -1729,6 +1730,10 @@ class AdminControllerCore extends Controller
return $form;
}
}
public function renderKpis()
{
}
/**
* Function used to render the options for this controller
@@ -1810,7 +1815,6 @@ class AdminControllerCore extends Controller
public function setMedia()
{
$admin_webpath = str_ireplace(_PS_ROOT_DIR_, '', _PS_ADMIN_DIR_);
$admin_webpath = preg_replace('/^'.preg_quote(DIRECTORY_SEPARATOR, '/').'/', '', $admin_webpath);
+55
View File
@@ -0,0 +1,55 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class HelperKpiCore extends Helper
{
public $base_folder = 'helpers/kpi/';
public $base_tpl = 'kpi.tpl';
public $id;
public $icon;
public $color;
public $title;
public $subtitle;
public $value;
public $source;
public function generate()
{
$this->tpl = $this->createTemplate($this->base_tpl);
$this->tpl->assign(array(
'id' => $this->id,
'icon' => $this->icon,
'color' => $this->color,
'title' => $this->title,
'subtitle' => $this->subtitle,
'value' => $this->value,
'source' => $this->source
));
return $this->tpl->fetch();
}
}
+41
View File
@@ -0,0 +1,41 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class HelperKpiRowCore extends Helper
{
public $base_folder = 'helpers/kpi/';
public $base_tpl = 'row.tpl';
public $kpis = array();
public function generate()
{
$this->tpl = $this->createTemplate($this->base_tpl);
$this->tpl->assign('kpis', $this->kpis);
return $this->tpl->fetch();
}
}
@@ -1238,6 +1238,40 @@ class AdminOrdersControllerCore extends AdminController
parent::postProcess();
}
public function renderKpis()
{
$time = time();
$kpis = array();
$helper = new HelperKpi();
$helper->id = 'box-carts';
$helper->icon = 'icon-shopping-cart';
$helper->color = 'color2';
$helper->title = $this->l('Abandoned Carts');
$helper->subtitle = $this->l('Today');
if (Configuration::get('PS_KPI_ABANDONED_CARTS') !== false)
$helper->value = Configuration::get('PS_KPI_ABANDONED_CARTS');
if (Configuration::get('PS_KPI_ABANDONED_CARTS_EXPIRE') < $time)
$helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=abandoned_cart';
$kpis[] = $helper->generate();
$helper = new HelperKpi();
$helper->id = 'box-average-order';
$helper->icon = 'icon-money';
$helper->color = 'color3';
$helper->title = $this->l('Average Order Value');
$helper->subtitle = $this->l('30 days');
if (Configuration::get('PS_KPI_AVG_ORDER_VALUE') !== false)
$helper->value = Configuration::get('PS_KPI_AVERAGE_ORDER_VALUE');
if (Configuration::get('PS_KPI_AVG_ORDER_VALUE_EXPIRE') < $time)
$helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=average_order_value';
$kpis[] = $helper->generate();
$helper = new HelperKpiRow();
$helper->kpis = $kpis;
return $helper->generate();
}
public function renderView()
{
@@ -26,4 +26,38 @@
class AdminStatsControllerCore extends AdminStatsTabController
{
public function displayAjaxGetKpi()
{
$currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
switch (Tools::getValue('kpi'))
{
case 'abandoned_cart':
$value = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT COUNT(*)
FROM `'._DB_PREFIX_.'cart`
WHERE `date_add` BETWEEN "'.pSQL(date('Y-m-d')).' 00:00:00" AND "'.pSQL(date('Y-m-d')).' 23:59:59"
AND id_cart NOT IN (SELECT id_cart FROM `'._DB_PREFIX_.'orders`)
'.Shop::addSqlRestriction(Shop::SHARE_ORDER));
Configuration::updateValue('PS_KPI_ABANDONED_CARTS', $value);
Configuration::updateValue('PS_KPI_ABANDONED_CARTS_EXPIRE', strtotime('+10 min'));
break;
case 'average_order_value':
$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT
COUNT(`id_order`) as orders,
SUM(`total_paid_tax_excl` / `conversion_rate`) as total_paid_tax_excl
FROM `'._DB_PREFIX_.'orders`
WHERE `invoice_date` BETWEEN "'.pSQL(date('Y-m-d', strtotime('-31 day'))).' 00:00:00" AND "'.pSQL(date('Y-m-d', strtotime('-1 day'))).' 23:59:59"
'.Shop::addSqlRestriction(Shop::SHARE_ORDER));
$value = Tools::displayPrice($row['orders'] ? $row['total_paid_tax_excl'] / $row['orders'] : 0, $currency);
Configuration::updateValue('PS_KPI_AVG_ORDER_VALUE', $value);
Configuration::updateValue('PS_KPI_AVG_ORDER_VALUE_EXPIRE', strtotime(date('Y-m-d 00:00:00', strtotime('+1 day'))));
break;
default:
$value = false;
}
if ($value !== false)
die(Tools::jsonEncode(array('value' => $value)));
die(Tools::jsonEncode(array('has_errors' => true)));
}
}
@@ -36,6 +36,9 @@ abstract class AdminStatsTabControllerCore extends AdminPreferencesControllerCor
public function initContent()
{
if ($this->ajax)
return;
$this->initTabModuleList();
$this->addToolBarModulesListButton();
$this->toolbar_title = $this->l('Stats', 'AdminStatsTab');