* @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) exit; class StatsStock extends Module { private $html = ''; public function __construct() { $this->name = 'statsstock'; $this->tab = 'analytics_stats'; $this->version = '1.6.0'; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Available quantities'); $this->description = $this->l('Adds a tab showing the quantity of available products for sale to the Stats dashboard.'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.7.0.99'); } public function install() { return parent::install() && $this->registerHook('AdminStatsModules'); } public function hookAdminStatsModules() { if (Tools::isSubmit('submitCategory')) $this->context->cookie->statsstock_id_category = Tools::getValue('statsstock_id_category'); $ru = AdminController::$currentIndex.'&module='.$this->name.'&token='.Tools::getValue('token'); $currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); $filter = ((int)$this->context->cookie->statsstock_id_category ? ' AND p.id_product IN (SELECT cp.id_product FROM '._DB_PREFIX_.'category_product cp WHERE cp.id_category = '.(int)$this->context->cookie->statsstock_id_category.')' : ''); $sql = 'SELECT p.id_product, p.reference, pl.name, IFNULL(( SELECT AVG(product_attribute_shop.wholesale_price) FROM '._DB_PREFIX_.'product_attribute pa '.Shop::addSqlAssociation('product_attribute', 'pa').' WHERE p.id_product = pa.id_product AND product_attribute_shop.wholesale_price != 0 '; if (version_compare(_PS_VERSION_, '1.7.0.0', '>=')) { $sql .= 'AND p.state = ' . Product::STATE_SAVED . ' '; } $sql .= '), product_shop.wholesale_price) as wholesale_price, IFNULL(stock.quantity, 0) as quantity FROM '._DB_PREFIX_.'product p '.Shop::addSqlAssociation('product', 'p').' INNER JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$this->context->language->id.Shop::addSqlRestrictionOnLang('pl').') '.Product::sqlStock('p', 0); if (version_compare(_PS_VERSION_, '1.7.0.0', '>=')) { $sql .= ' WHERE p.state = ' . Product::STATE_SAVED . ' '; } $sql .= $filter; $products = Db::getInstance()->executeS($sql); foreach ($products as $key => $p) $products[$key]['stockvalue'] = $p['wholesale_price'] * $p['quantity']; $this->html .= '
' .$this->l('Evaluation of available quantities for sale'). '
'; if (!count($products)) $this->html .= '

'.$this->l('Your catalog is empty.').'

'; else { $rollup = array('quantity' => 0, 'wholesale_price' => 0, 'stockvalue' => 0); $this->html .= ' '; foreach ($products as $product) { $rollup['quantity'] += $product['quantity']; $rollup['wholesale_price'] += $product['wholesale_price']; $rollup['stockvalue'] += $product['stockvalue']; $this->html .= ''; } $this->html .= '
'.$this->l('ID').' '.$this->l('Ref.').' '.$this->l('Item').' '.$this->l('Available quantity for sale').' '.$this->l('Price*').' '.$this->l('Value').'
'.$product['id_product'].' '.$product['reference'].' '.$product['name'].' '.$product['quantity'].' '.Tools::displayPrice($product['wholesale_price'], $currency).' '.Tools::displayPrice($product['stockvalue'], $currency).'
'.$this->l('Total quantities').' '.$this->l('Average price').' '.$this->l('Total value').'
'.$rollup['quantity'].' '.Tools::displayPrice($rollup['wholesale_price'] / count($products), $currency).' '.Tools::displayPrice($rollup['stockvalue'], $currency).'
'.$this->l('This section corresponds to the default wholesale price according to the default supplier for the product. An average price is used when the product has attributes.'); return $this->html; } } }