* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) */ if (!defined('_PS_VERSION_')) { exit; } class statsstock extends Module { private $html = ''; public function __construct() { $this->name = 'statsstock'; $this->version = '2.0.1'; $this->tab = 'administration'; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->trans('Available quantities', [], 'Modules.Statsstock.Admin'); $this->description = $this->trans('Enrich your stats, add a tab showing the available quantities of products left for sale.', [], 'Modules.Statsstock.Admin'); $this->ps_versions_compliancy = ['min' => '1.7.6.0', 'max' => _PS_VERSION_]; } public function install() { return parent::install() && $this->registerHook('displayAdminStatsModules'); } public function hookDisplayAdminStatsModules() { 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((int) 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 ), 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) . ' WHERE 1 = 1 ' . $filter; /** @var array $products */ $products = Db::getInstance()->executeS($sql); foreach ($products as $key => $p) { $products[$key]['stockvalue'] = $p['wholesale_price'] * $p['quantity']; } $this->html .= '
' . $this->trans('Evaluation of available quantities for sale', [], 'Modules.Statsstock.Admin') . '
'; if (!count($products)) { $this->html .= '

' . $this->trans('Your catalog is empty.', [], 'Modules.Statsstock.Admin') . '

'; } else { $rollup = ['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->trans('ID', [], 'Admin.Global') . ' ' . $this->trans('Ref.', [], 'Modules.Statsstock.Admin') . ' ' . $this->trans('Item', [], 'Admin.Global') . ' ' . $this->trans('Available quantity for sale', [], 'Admin.Global') . ' ' . $this->trans('Price*', [], 'Modules.Statsstock.Admin') . ' ' . $this->trans('Value', [], 'Admin.Global') . '
' . $product['id_product'] . ' ' . $product['reference'] . ' ' . $product['name'] . ' ' . $product['quantity'] . ' ' . (method_exists($this->context, 'getCurrentLocale') ? $this->context->getCurrentLocale()->formatPrice($product['wholesale_price'], $currency->iso_code) : $product['wholesale_price']) . ' ' . (method_exists($this->context, 'getCurrentLocale') ? $this->context->getCurrentLocale()->formatPrice($product['stockvalue'], $currency->iso_code) : $product['stockvalue']) . '
' . $this->trans('Total quantities', [], 'Modules.Statsstock.Admin') . ' ' . $this->trans('Average price', [], 'Admin.Global') . ' ' . $this->trans('Total value', [], 'Modules.Statsstock.Admin') . '
' . $rollup['quantity'] . ' ' . (method_exists($this->context, 'getCurrentLocale') ? $this->context->getCurrentLocale()->formatPrice($rollup['wholesale_price'] / count($products), $currency->iso_code) : $rollup['wholesale_price'] / count($products)) . ' ' . (method_exists($this->context, 'getCurrentLocale') ? $this->context->getCurrentLocale()->formatPrice($rollup['stockvalue'], $currency->iso_code) : $rollup['stockvalue']) . '
' . $this->trans('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.', [], 'Modules.Statsstock.Admin'); return $this->html; } } }