From c0c4af988f87fbb5a109e655d14be55891c7368b Mon Sep 17 00:00:00 2001 From: Damien Metzger Date: Tue, 17 Sep 2013 10:47:54 +0200 Subject: [PATCH] // Added net profits / visitor as a KPI --- .../orders/helpers/list/list_header.tpl | 6 -- controllers/admin/AdminOrdersController.php | 14 +++++ controllers/admin/AdminStatsController.php | 57 +++++++++++++++++++ 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/admin-dev/themes/default/template/controllers/orders/helpers/list/list_header.tpl b/admin-dev/themes/default/template/controllers/orders/helpers/list/list_header.tpl index bb6fc4589..57882264b 100644 --- a/admin-dev/themes/default/template/controllers/orders/helpers/list/list_header.tpl +++ b/admin-dev/themes/default/template/controllers/orders/helpers/list/list_header.tpl @@ -33,12 +33,6 @@ Conversion Rate
30 days
1.89% - -
- - Net Profit per visitor
30 days
- $2.12 -
diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 56f8b4f40..2ba694b22 100755 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1244,6 +1244,8 @@ class AdminOrdersControllerCore extends AdminController $time = time(); $kpis = array(); + /* The data generation is located in AdminStatsControllerCore */ + $helper = new HelperKpi(); $helper->id = 'box-carts'; $helper->icon = 'icon-shopping-cart'; @@ -1267,6 +1269,18 @@ class AdminOrdersControllerCore extends AdminController 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 HelperKpi(); + $helper->id = 'box-net-profit-visitor'; + $helper->icon = 'icon-user'; + $helper->color = 'color4'; + $helper->title = $this->l('Net Profit per Visitor '); + $helper->subtitle = $this->l('30 days'); + if (Configuration::get('PS_KPI_NETPROFIT_VISITOR') !== false) + $helper->value = Configuration::get('PS_KPI_NETPROFIT_VISITOR'); + if (Configuration::get('PS_KPI_NETPROFIT_VISITOR_EXPIRE') < $time) + $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=netprofit_visitor'; + $kpis[] = $helper->generate(); $helper = new HelperKpiRow(); $helper->kpis = $kpis; diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index d3510846f..5df49e2e8 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -53,6 +53,63 @@ class AdminStatsControllerCore extends AdminStatsTabController 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; + case 'netprofit_visitor': + + $gapi = Module::isInstalled('gapi') ? Module::getInstanceByName('gapi') : false; + if (Validate::isLoadedObject($gapi) && $gapi->isConfigured()) + { + $visitors = 0; + if ($result = $gapi->requestReportData('', 'ga:visitors', date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), null, null, 1, 1)) + $visitors = $result[0]['metrics']['visitors']; + } + else + { + $visitors = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' + SELECT COUNT(DISTINCT id_guest) + FROM `'._DB_PREFIX_.'connections` + WHERE `date_add` 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(false).''); + } + + $row_products = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' + SELECT + SUM(od.`total_price_tax_excl` / `conversion_rate`) as total_product_price_tax_excl, + 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(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, 'o')); + extract($row_products); + + $total_discounts_tax_excl = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' + SELECT SUM(`total_discounts_tax_excl` / `conversion_rate`) as total_discounts_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)); + + $total_credit_tax_excl = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' + SELECT SUM(os.`amount` / o.`conversion_rate`) as total_credit_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(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, 'o')); + + $net_profits = 0; + $net_profits += $total_product_price_tax_excl; + $net_profits -= $total_discounts_tax_excl; + $net_profits -= $total_purchase_price; + $net_profits -= $total_credit_tax_excl; + + if ($visitors) + $value = Tools::displayPrice($net_profits / $visitors, $currency); + elseif ($net_profits) + $value = '∞'; + else + $value = Tools::displayPrice(0, $currency); + + Configuration::updateValue('PS_KPI_NETPROFIT_VISITOR', $value); + Configuration::updateValue('PS_KPI_NETPROFIT_VISITOR_EXPIRE', strtotime(date('Y-m-d 00:00:00', strtotime('+1 day')))); + break; default: $value = false; }