bebeboutik/adm/tabs/AdminHome.php

313 lines
12 KiB
PHP
Raw Normal View History

2016-01-04 12:48:08 +01:00
<?php
/*
* 2007-2011 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-2011 PrestaShop SA
* @version Release: $Revision: 8943 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AdminHome extends AdminTab
{
public function postProcess()
{
}
private function _displayOptimizationTips() {}
public function display()
{
global $cookie;
$this->warnDomainName();
$tab = get_class();
$protocol = Tools::usingSecureMode()?'https':'http';
$isoDefault = Language::getIsoById(intval(Configuration::get('PS_LANG_DEFAULT')));
$isoUser = Language::getIsoById(intval($cookie->id_lang));
$isoCountry = Country::getIsoById(Configuration::get('PS_COUNTRY_DEFAULT'));
$currency = new Currency((int)(Configuration::get('PS_CURRENCY_DEFAULT')));
$employee = new Employee($cookie->id_employee);
echo '<div>
<h1>'.$this->l('Dashboard').'</h1>
2016-01-06 11:53:10 +01:00
<hr style="background-color: #812143;color: #812143;" />';
2016-01-04 12:48:08 +01:00
echo '</div>';
2016-01-06 11:53:10 +01:00
// echo '
// <div id="column_left">
// <ul class="F_list clearfix">
// <li id="first_block">
// <h4><a href="index.php?tab=AdminCatalog&addcategory&token='.Tools::getAdminTokenLite('AdminCatalog').'">'.$this->l('New category').'</a></h4>
// <p>'.$this->l('Create a new category and organize your products.').'</p>
// </li>
// <li id="second_block">
// <h4><a href="index.php?tab=AdminCatalog&id_category=1&addproduct&token='.Tools::getAdminTokenLite('AdminCatalog').'">'.$this->l('New product').'</a></h4>
// <p>'.$this->l('Fill up your catalog with new articles and attributes.').'</p>
// </li>
// <li id="third_block">
// <h4><a href="index.php?tab=AdminStats&token='.Tools::getAdminTokenLite('AdminStats').'">'.$this->l('Statistics').'</a></h4>
// <p>'.$this->l('Manage your activity with a thorough analysis of your e-shop.').'</p>
// </li>
// <li id="fourth_block">
// <h4><a href="index.php?tab=AdminEmployees&addemployee&token='.Tools::getAdminTokenLite('AdminEmployees').'">'.$this->l('New employee').'</a></h4>
// <p>'.$this->l('Add a new employee account and discharge a part of your duties of shop owner.').'</p>
// </li>
// </ul>
// ';
$result = array('total_sales' => 0.0, 'total_orders' => 0);
$stats = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'configuration`
WHERE `name` = "ADMINHOME_STATS"
AND `date_upd` > DATE_SUB(NOW(), INTERVAL 2 HOUR)
');
echo '<p>Dernière mise à jour : ' . $stats['date_upd'] . '</p>';
if($stats) {
$stats = explode(';', $stats['value']);
$result['total_sales'] = (float) $stats[0];
$result['total_orders'] = (int) $stats[1];
} else {
$stats_id_orders = array();
foreach(Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT o.`id_order`, o.`total_paid_real`
FROM `'._DB_PREFIX_.'orders` o
LEFT JOIN `'._DB_PREFIX_.'order_history` h
ON o.`id_order` = h.`id_order`
WHERE (h.`id_order_state` = 2
OR h.`id_order_state` = 13)
AND h.`date_add` >= "'.pSQL(date('Y-m-01 00:00:00')).'"
AND h.`date_add` < "'.pSQL(date('Y-m-01 00:00:00', strtotime('next month'))).'"
GROUP BY o.`id_order`
') as $row) {
$result['total_sales'] += (float) $row['total_paid_real'];
$result['total_orders']++;
$stats_id_orders[] = (int) $row['id_order'];
}
for($i=0, $l=count($stats_id_orders); $i < $l; $i+=2000) {
foreach(Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT o.`total_paid_real`
FROM `'._DB_PREFIX_.'orders` o
LEFT JOIN `'._DB_PREFIX_.'order_history` h
ON o.`id_order` = h.`id_order`
WHERE (h.`id_order_state` = 2
OR h.`id_order_state` = 13)
AND h.`date_add` >= "'.pSQL(date('Y-m-01 00:00:00', strtotime('previous month'))).'"
AND h.`date_add` < "'.pSQL(date('Y-m-01 00:00:00')).'"
AND o.`id_order` IN ('.implode(', ', array_slice($stats_id_orders, $i, 2000)).')
GROUP BY o.`id_order`
') as $row) {
$result['total_sales'] -= (float) $row['total_paid_real'];
$result['total_orders']--;
}
}
$stats_id_orders = null;
$result['total_sales'] -= (float) Db::getInstance()->getValue('
SELECT SUM(ROUND((d.product_price * (1 - d.reduction_percent / 100) - d.reduction_amount) * (1 - d.group_reduction / 100) * (1 + d.tax_rate / 100), 2) * sd.`product_quantity`)
FROM `'._DB_PREFIX_.'order_detail` d
LEFT JOIN `'._DB_PREFIX_.'order_slip_detail` sd
ON d.`id_order_detail` = sd.`id_order_detail`
LEFT JOIN `'._DB_PREFIX_.'order_slip` s
ON sd.`id_order_slip` = s.`id_order_slip`
WHERE s.`date_add` >= "'.pSQL(date('Y-m-01 00:00:00')).'"
AND s.`date_add` < "'.pSQL(date('Y-m-01 00:00:00', strtotime('next month'))).'"
');
$result['total_sales'] -= (float) Db::getInstance()->getValue('
SELECT SUM(o.`total_shipping`)
FROM `'._DB_PREFIX_.'orders` o
LEFT JOIN `'._DB_PREFIX_.'order_slip` s
ON o.`id_order` = s.`id_order`
WHERE s.`date_add` >= "'.pSQL(date('Y-m-01 00:00:00')).'"
AND s.`date_add` < "'.pSQL(date('Y-m-01 00:00:00', strtotime('next month'))).'"
AND s.`shipping_cost` = 1
');
Configuration::updateValue('ADMINHOME_STATS', $result['total_sales'].';'.$result['total_orders']);
}
// $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
// SELECT SUM(o.`total_paid_real` / o.conversion_rate) as total_sales, COUNT(*) as total_orders
// FROM `'._DB_PREFIX_.'orders` o
// WHERE o.valid = 1
// AND o.`invoice_date` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\' ');
2016-01-04 12:48:08 +01:00
$result2 = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT COUNT(`id_customer`) AS total_registrations
FROM `'._DB_PREFIX_.'customer` c
2016-01-06 11:53:10 +01:00
WHERE c.`date_add` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'');
2016-01-04 12:48:08 +01:00
$result3 = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT SUM(pv.`counter`) AS total_viewed
FROM `'._DB_PREFIX_.'page_viewed` pv
LEFT JOIN `'._DB_PREFIX_.'date_range` dr ON pv.`id_date_range` = dr.`id_date_range`
LEFT JOIN `'._DB_PREFIX_.'page` p ON pv.`id_page` = p.`id_page`
LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON pt.`id_page_type` = p.`id_page_type`
WHERE pt.`name` = \'product.php\'
AND dr.`time_start` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'
AND dr.`time_end` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'');
$results = array_merge($result, array_merge($result2, $result3));
echo '
<div class="table_info">
<h5><a href="index.php?tab=AdminStats&token='.Tools::getAdminTokenLite('AdminStats').'">'.$this->l('View more').'</a> '.$this->l('Monthly Statistics').' </h5>
<table class="table_info_details">
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Sales').'
</td>
<td>
'.Tools::displayPrice($results['total_sales'], $currency).'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Total registrations').'
</td>
<td>
'.(int)($results['total_registrations']).'
</td>
</tr>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Total orders').'
</td>
<td>
'.(int)($results['total_orders']).'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Product pages viewed').'
</td>
<td>
'.(int)($results['total_viewed']).'
</td>
</tr>
</table>
</div>
';
$all = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'customer_thread');
$unread = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'customer_thread` WHERE `status` = "open"');
$pending = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'customer_thread` WHERE `status` LIKE "%pending%"');
$close = $all - ($unread + $pending);
echo '
<div class="table_info" id="table_info_last">
<h5><a href="index.php?tab=AdminCustomerThreads&token='.Tools::getAdminTokenLite('AdminCustomerThreads').'">'.$this->l('View more').'</a> '.$this->l('Customers service').'</h5>
<table class="table_info_details">
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Thread unread').'
</td>
<td>
'.$unread.'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Thread pending').'
</td>
<td>
'.$pending.'
</td>
</tr>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Thread closed').'
</td>
<td>
'.$close.'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Total thread').'
</td>
<td>
'.$all.'
</td>
</tr>
</table>
</div>
<div id="table_info_large">
<h5><a href="index.php?tab=AdminStats&token='.Tools::getAdminTokenLite('AdminStats').'">'.$this->l('View more').'</a> <strong>'.$this->l('Statistics').'</strong> / '.$this->l('Sales of the week').'</h5>
<div id="stat_google">';
define('PS_BASE_URI', __PS_BASE_URI__);
$chart = new Chart();
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT total_paid / conversion_rate as total_converted, invoice_date
FROM '._DB_PREFIX_.'orders o
WHERE valid = 1
AND invoice_date BETWEEN \''.date('Y-m-d', strtotime('-7 DAYS', time())).' 00:00:00\' AND \''.date('Y-m-d H:i:s').'\'');
foreach ($result as $row)
$chart->getCurve(1)->setPoint(strtotime($row['invoice_date']), $row['total_converted']);
$chart->setSize(580, 170);
$chart->setTimeMode(strtotime('-7 DAYS', time()), time(), 'd');
$chart->getCurve(1)->setLabel($this->l('Sales +Tx').' ('.strtoupper($currency->iso_code).')');
$chart->display();
echo ' </div>
</div>
<table cellpadding="0" cellspacing="0" id="table_customer">
<thead>
<tr>
<th class="order_id"><span class="first">'.$this->l('ID').'</span></th>
<th class="order_customer"><span>'.$this->l('Customer Name').'</span></th>
<th class="order_status"><span>'.$this->l('Status').'</span></th>
<th class="order_total"><span>'.$this->l('Total').'</span></th>
<th class="order_action"><span class="last">'.$this->l('Action').'</span></th>
<tr>
</thead>
<tbody>';
$orders = Order::getOrdersWithInformations(10);
$i = 0;
foreach ($orders AS $order)
{
$currency = Currency::getCurrency((int)$order['id_currency']);
echo '
<tr'.($i % 2 ? ' id="order_line1"' : '').'>
<td class="order_td_first order_id">'.(int)$order['id_order'].'</td>
<td class="order_customer">'.Tools::htmlentitiesUTF8($order['firstname']).' '.Tools::htmlentitiesUTF8($order['lastname']).'</td>
<td class="order_status">'.Tools::htmlentitiesUTF8($order['state_name']).'</td>
<td class="order_total">'.Tools::displayPrice((float)$order['total_paid'], $currency).'</td>
<td class="order_action">
<a href="index.php?tab=AdminOrders&id_order='.(int)$order['id_order'].'&vieworder&token='.Tools::getAdminTokenLite('AdminOrders').'" title="'.$this->l('Details').'"><img src="../img/admin/details.gif" alt="'.$this->l('See').'" /></a>
</td>
</tr>
';
$i++;
}
echo '
</tbody>
</table>
</div>
<div id="column_right"></div>
<div class="clear"></div>';
echo Module::hookExec('backOfficeHome');
}
}