// Added expense management to profitability KPI
This commit is contained in:
@@ -62,7 +62,7 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
return $visitors;
|
||||
}
|
||||
|
||||
public static function getAbandonedCarts($date_from, $date_to, $granularity = false)
|
||||
public static function getAbandonedCarts($date_from, $date_to)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT COUNT(DISTINCT id_guest)
|
||||
@@ -319,6 +319,33 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
return 0;
|
||||
return round($messages / $threads, 1);
|
||||
}
|
||||
|
||||
public static function getExpenses($date_from, $date_to)
|
||||
{
|
||||
$secs_per_year = 365.25 * 86400;
|
||||
$secs_per_month = 30.4375 * 86400;
|
||||
$total_secs = (strtotime($date_to) - min(strtotime($date_from), time())) / 86400;
|
||||
$expenses = Configuration::get('CONF_MONTHLY_FEES') * $total_secs / $secs_per_month + Configuration::get('CONF_YEARLY_FEES') * $total_secs / $secs_per_year;
|
||||
|
||||
$orders = Db::getInstance()->ExecuteS('
|
||||
SELECT
|
||||
total_paid_tax_incl / o.conversion_rate as total_paid_tax_incl,
|
||||
total_shipping_tax_excl / o.conversion_rate as total_shipping_tax_excl,
|
||||
module
|
||||
FROM `'._DB_PREFIX_.'orders` o
|
||||
WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"
|
||||
'.Shop::addSqlRestriction(Shop::SHARE_ORDER, 'o'));
|
||||
foreach ($orders as $order)
|
||||
{
|
||||
// Add flat fees for this order
|
||||
$expenses += Configuration::get('CONF_ORDER_FIXED_FEES') + Configuration::get('CONF_'.strtoupper($order['module']).'_FIXED_FEE');
|
||||
// Add variable fees for this order
|
||||
$expenses += $order['total_paid_tax_incl'] * (Configuration::get('CONF_ORDER_VAR_FEES') + Configuration::get('CONF_'.strtoupper($order['module']).'_VAR_FEE')) / 100;
|
||||
// Add shipping fees for this order
|
||||
$expenses += $order['total_shipping_tax_excl'] * (100 - Configuration::get('CONF_SHIPPING_MARGIN')) / 100;
|
||||
}
|
||||
return $expenses;
|
||||
}
|
||||
|
||||
public function displayAjaxGetKpi()
|
||||
{
|
||||
@@ -326,20 +353,20 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
switch (Tools::getValue('kpi'))
|
||||
{
|
||||
case 'conversion_rate':
|
||||
$visitors = AdminStatsController::getUniqueVisitors(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), 'day');
|
||||
$orders = AdminStatsController::getOrders(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), 'day');
|
||||
$visitors = AdminStatsController::getUniqueVisitors(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), false /*'day'*/);
|
||||
$orders = AdminStatsController::getOrders(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), false /*'day'*/);
|
||||
|
||||
$data = array();
|
||||
$from = strtotime(date('Y-m-d 00:00:00', strtotime('-31 day')));
|
||||
$to = strtotime(date('Y-m-d 23:59:59', strtotime('-1 day')));
|
||||
for ($date = $from; $date <= $to; $date = strtotime('+1 day', $date))
|
||||
if (isset($visitors[$date]) && $visitors[$date])
|
||||
$data[$date] = round(100 * ((isset($orders[$date]) && $orders[$date]) ? $orders[$date] : 0) / $visitors[$date], 2);
|
||||
else
|
||||
$data[$date] = 0;
|
||||
// $data = array();
|
||||
// $from = strtotime(date('Y-m-d 00:00:00', strtotime('-31 day')));
|
||||
// $to = strtotime(date('Y-m-d 23:59:59', strtotime('-1 day')));
|
||||
// for ($date = $from; $date <= $to; $date = strtotime('+1 day', $date))
|
||||
// if (isset($visitors[$date]) && $visitors[$date])
|
||||
// $data[$date] = round(100 * ((isset($orders[$date]) && $orders[$date]) ? $orders[$date] : 0) / $visitors[$date], 2);
|
||||
// else
|
||||
// $data[$date] = 0;
|
||||
|
||||
$visits_sum = array_sum($visitors);
|
||||
$orders_sum = array_sum($orders);
|
||||
$visits_sum = $visitors; //array_sum($visitors);
|
||||
$orders_sum = $orders; //array_sum($orders);
|
||||
if ($visits_sum)
|
||||
$value = round(100 * $orders_sum / $visits_sum, 2);
|
||||
elseif ($orders_sum)
|
||||
@@ -348,7 +375,7 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
$value = 0;
|
||||
$value .= '%';
|
||||
|
||||
ConfigurationKPI::updateValue('CONVERSION_RATE_CHART', Tools::jsonEncode($data));
|
||||
// ConfigurationKPI::updateValue('CONVERSION_RATE_CHART', Tools::jsonEncode($data));
|
||||
ConfigurationKPI::updateValue('CONVERSION_RATE', $value);
|
||||
ConfigurationKPI::updateValue('CONVERSION_RATE_EXPIRE', strtotime(date('Y-m-d 00:00:00', strtotime('+1 day'))));
|
||||
break;
|
||||
@@ -356,7 +383,7 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
case 'abandoned_cart':
|
||||
$value = AdminStatsController::getAbandonedCarts(date('Y-m-d H:i:s', strtotime('-2 day')), date('Y-m-d H:i:s', strtotime('-1 day')));
|
||||
ConfigurationKPI::updateValue('ABANDONED_CARTS', $value);
|
||||
ConfigurationKPI::updateValue('ABANDONED_CARTS_EXPIRE', strtotime('+10 min'));
|
||||
ConfigurationKPI::updateValue('ABANDONED_CARTS_EXPIRE', strtotime('+1 hour'));
|
||||
break;
|
||||
|
||||
case 'installed_modules':
|
||||
@@ -547,9 +574,10 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
case 'netprofit_visitor':
|
||||
$date_from = date('Y-m-d', strtotime('-31 day'));
|
||||
$date_to = date('Y-m-d', strtotime('-1 day'));
|
||||
$visitors = AdminStatsController::getUniqueVisitors($date_from, $date_to);
|
||||
$total_visitors = AdminStatsController::getUniqueVisitors($date_from, $date_to);
|
||||
$total_sales = AdminStatsController::getTotalSales($date_from, $date_to);
|
||||
$total_purchase = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
$total_expenses = AdminStatsController::getExpenses($date_from, $date_to);
|
||||
$total_purchases = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT 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
|
||||
@@ -557,11 +585,11 @@ class AdminStatsControllerCore extends AdminStatsTabController
|
||||
'.Shop::addSqlRestriction(Shop::SHARE_ORDER, 'o'));
|
||||
|
||||
$net_profits = $total_sales;
|
||||
$net_profits -= $total_purchase;
|
||||
// Todo : Add profitability calculation
|
||||
$net_profits -= $total_purchases;
|
||||
$net_profits -= $total_expenses;
|
||||
|
||||
if ($visitors)
|
||||
$value = Tools::displayPrice($net_profits / $visitors, $currency);
|
||||
if ($total_visitors)
|
||||
$value = Tools::displayPrice($net_profits / $total_visitors, $currency);
|
||||
elseif ($net_profits)
|
||||
$value = '∞';
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user