public function ajaxProcessProductQuantity()
 {
     if (!Tools::getValue('actionQty')) {
         return Tools::jsonEncode(array('error' => $this->l('Undefined action')));
     }
     $product = new Product((int) Tools::getValue('id_product'), true);
     switch (Tools::getValue('actionQty')) {
         case 'depends_on_stock':
             if (Tools::getValue('value') === false) {
                 die(Tools::jsonEncode(array('error' => $this->l('Undefined value'))));
             }
             if ((int) Tools::getValue('value') != 0 && (int) Tools::getValue('value') != 1) {
                 die(Tools::jsonEncode(array('error' => $this->l('Incorrect value'))));
             }
             if (!$product->advanced_stock_management && (int) Tools::getValue('value') == 1) {
                 die(Tools::jsonEncode(array('error' => $this->l('Not possible if advanced stock management is disabled. '))));
             }
             if ($product->advanced_stock_management && Pack::isPack($product->id)) {
                 die(Tools::jsonEncode(array('error' => $this->l('Not possible if the product is a pack.'))));
             }
             StockAvailable::setProductDependsOnStock($product->id, (int) Tools::getValue('value'));
             break;
         case 'out_of_stock':
             if (Tools::getValue('value') === false) {
                 die(Tools::jsonEncode(array('error' => $this->l('Undefined value'))));
             }
             if (!in_array((int) Tools::getValue('value'), array(0, 1, 2))) {
                 die(Tools::jsonEncode(array('error' => $this->l('Incorrect value'))));
             }
             StockAvailable::setProductOutOfStock($product->id, (int) Tools::getValue('value'));
             break;
         case 'set_qty':
             if (Tools::getValue('value') === false || !is_numeric(trim(Tools::getValue('value')))) {
                 die(Tools::jsonEncode(array('error' => $this->l('Undefined value'))));
             }
             if (Tools::getValue('id_product_attribute') === false) {
                 die(Tools::jsonEncode(array('error' => $this->l('Undefined id product attribute'))));
             }
             StockAvailable::setQuantity($product->id, (int) Tools::getValue('id_product_attribute'), (int) Tools::getValue('value'));
             Hook::exec('actionProductUpdate', array('product' => $this->object));
             // Catch potential echo from modules
             $error = ob_get_contents();
             if (!empty($error)) {
                 ob_end_clean();
                 die(Tools::jsonEncode(array('error' => $error)));
             }
             break;
         case 'advanced_stock_management':
             if (Tools::getValue('value') === false) {
                 die(Tools::jsonEncode(array('error' => $this->l('Undefined value'))));
             }
             if ((int) Tools::getValue('value') != 1 && (int) Tools::getValue('value') != 0) {
                 die(Tools::jsonEncode(array('error' => $this->l('Incorrect value'))));
             }
             if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && (int) Tools::getValue('value') == 1) {
                 die(Tools::jsonEncode(array('error' => $this->l('Not possible if advanced stock management is disabled. '))));
             }
             if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && Pack::isPack($product->id)) {
                 die(Tools::jsonEncode(array('error' => $this->l('Not possible if the product is a pack.'))));
             }
             $product->setAdvancedStockManagement((int) Tools::getValue('value'));
             if (StockAvailable::dependsOnStock($product->id) == 1 && (int) Tools::getValue('value') == 0) {
                 StockAvailable::setProductDependsOnStock($product->id, 0);
             }
             break;
     }
     if ($product->active == 1 && $product->quantity > 0 && $product->available_for_order) {
         if (StockALert::getActiveById($product->id)) {
             if ($productsalert = StockALertProducts::getById($product->id)) {
                 $updPrAlert = new StockAlertProducts($productsalert['id_stock_alert_products']);
                 $updPrAlert->active = 1;
                 $updPrAlert->update();
             } else {
                 StockAlertProducts::addAlertProducts($product->id);
             }
         }
     }
     die(Tools::jsonEncode(array('error' => false)));
 }
include dirname(__FILE__) . '/../../../config/config.inc.php';
include dirname(__FILE__) . '/../../../init.php';
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
if ($productsForAlert = StockALertProducts::getAllProductsForAlert()) {
    if ($usersForMail = StockALert::getAllRecordByProducts($productsForAlert)) {
        $link = new Link();
        foreach ($usersForMail as $key => $value) {
            $products = array();
            foreach ($value as $item) {
                $pr = new Product($item);
                $q = $cover = Product::getCover($pr->id);
                array_push($products, array('name' => $pr->name['1'], 'price' => Tools::displayPrice($pr->price), 'quantity' => StockAvailable::getQuantityAvailableByProduct($pr->id), 'link' => $link->getProductLink($pr), 'image' => $link->getImageLink($pr->link_rewrite, $cover['id_image'], 'large_default')));
            }
            $template = 'stockAlert';
            $subject = 'Товар доступен';
            $product_list_html = StockALertProducts::getEmailTemplateContent('stockAlert.tpl', Mail::TYPE_HTML, $products);
            $templateVars = array('{products}' => $product_list_html);
            $admin_mails = Configuration::get('PS_SHOP_EMAIL');
            $te = Mail::Send(1, $template, $subject, $templateVars, $key);
        }
    }
    $r = StockALertProducts::deactivate($productsForAlert);
    //Обнуляем списки отслеживаемых продуктов и убираем их из листа ожидания
    $r = StockALert::deactivate($productsForAlert);
    echo 'Письма отправлены';
} else {
    echo 'Не кому отправлять письма';
}