HEX
Server: LiteSpeed
System: Linux php-prod-3.spaceapp.ru 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: labhr1009 (1014)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/retile.ru/public_html/.~~~~~update_discount_prices.php
<?php
// Подключаем ядро OpenCart
require_once('config.php');
require_once('system/startup.php');

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$config->load('default');
$config->load('catalog');
$registry->set('config', $config);

// Database
if ($config->get('db_autostart')) {
	$registry->set('db', new DB($config->get('db_engine'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port')));
}

// Получаем объект БД из реестра
$db = $registry->get('db');

// ID категории, для которой нужно пересчитать цены скидок
$category_id = 140; // Замените на нужный ID категории

// Коэффициент уменьшения (20% → 0.80)
$coefficient = 0.80;

// Получаем список товаров в указанной категории
$query_products = $db->query("
	SELECT DISTINCT p.product_id, p.price
	FROM `" . DB_PREFIX . "product` p
	INNER JOIN `" . DB_PREFIX . "product_to_category` ptc 
		ON p.product_id = ptc.product_id
	WHERE ptc.category_id = '" . (int)$category_id . "'
	AND p.status = 1
");

if ($query_products->num_rows) {
	echo "<strong>Пересчитываются цены скидок для товаров в категории ID " . $category_id . ":</strong><br><br>";
	
	$updated_products = 0;
	$total_discounts = 0;
	
	foreach ($query_products->rows as $product) {
		$product_id = (int)$product['product_id'];
		
		// Получаем все скидки для текущего товара
		$query_discounts = $db->query("
			SELECT product_discount_id, price, customer_group_id, quantity, priority
			FROM `" . DB_PREFIX . "product_discount`
			WHERE product_id = '" . $product_id . "'
			ORDER BY priority ASC, quantity ASC
		");
		
		if ($query_discounts->num_rows) {
			$product_has_discounts = false;
			echo "<strong>Товар ID " . $product_id . ":</strong><br>";
			
			foreach ($query_discounts->rows as $discount) {
				$old_price = (float)$product['price'];
				
				// Пропускаем скидки с нулевой ценой
				if ($old_price <= 0) {
					continue;
				}
				
				$new_price = round($old_price * $coefficient); // Округляем до целого числа
				
				// Обновляем цену скидки
				// $db->query("
				// 	UPDATE `" . DB_PREFIX . "product_discount`
				// 	SET price = '" . (float)$new_price . "'
				// 	WHERE product_discount_id = '" . (int)$discount['product_discount_id'] . "'
				// ");

				echo "&nbsp;&nbsp;Скидка ID " . $discount['product_discount_id'] . 
				      " (Группа: " . $discount['customer_group_id'] . 
				      ", Количество: " . $discount['quantity'] . 
				      ", Приоритет: " . $discount['priority'] . 
				      "): " . number_format($old_price, 2, '.', '') . 
				      " → " . number_format($new_price, 2, '.', '') . "<br>";
				
				$total_discounts++;
				$product_has_discounts = true;
			}
			
			if ($product_has_discounts) {
				$updated_products++;
			}
			echo "<br>";
		}
	}
	
	if ($total_discounts > 0) {
		echo "<strong>Готово! Обновлено скидок: " . $total_discounts . " для " . $updated_products . " товаров.</strong>";
	} else {
		echo "<strong>В категории ID " . $category_id . " нет скидок для обновления.</strong>";
	}
} else {
	echo "В категории ID " . $category_id . " нет активных товаров.";
}
?>