Версия магазина: ocStore v1.5.1.3
Описание: По-умолчанию, на текущий момент, если выбираешь в настройках пункт " Отображать цены с налогом", то в карточке товара, в категории и в поиске отображается цена с налогом, но в корзине и при оформлении заказа отображается цена товара без налога и отдельно отображается налог, что на мой взгляд не очень удобно. Особенно для тех, кто использует налоги, чтобы устанавливать для товаров торговую наценку.
Данное дополнение добавляет в настройки админки пункт " Налог в цене товара" в раздел "Опции". В расчётах, в корзине и при оформлении заказа налог уже будет заложен в цене товара, т.е. цена товара будет отображаться с учётом налога. Сам налог в расчётах, в корзине и при оформлении отображаться не будет, в независимости от того, включен ли он в "Учитывать в заказе". Для работы этой опции требуется включить "Отображать цены с налогом".
Начало и ещё одна полезняшка здесь
Изменения в файлах:
Пункт в админке
Файл: admin\view\template\setting\setting.tplДействие:
ищем блок
<tr>
<td><?php echo $entry_tax; ?></td>
................
................
</tr>
Изменения: после этого блока добавляем такой блок
<!-- Вкл_Выкл - налог в цене товара -->
<tr>
<td><?php echo $tax__tax_in_price; ?></td>
<td><?php if ($config_tax__tax_in_price) { ?>
<input type="radio" name="config_tax__tax_in_price" value="1" checked="checked" />
<?php echo $text_yes; ?>
<input type="radio" name="config_tax__tax_in_price" value="0" />
<?php echo $text_no; ?>
<?php } else { ?>
<input type="radio" name="config_tax__tax_in_price" value="1" />
<?php echo $text_yes; ?>
<input type="radio" name="config_tax__tax_in_price" value="0" checked="checked" />
<?php echo $text_no; ?>
<?php } ?></td>
</tr>
<!-- -->
Файл: admin\language\russian\setting\setting.php
Действие:
ищем блок
$_['entry_tax'] = 'Отображать цены с налогом:';
Изменения: после этого блока добавляем:
// Вкл_Выкл - налог в цене товара
$_['tax__tax_in_price'] = 'Налог в цене товара: <br /><span class="help">В расчётах, в корзине и при оформлении заказа налог уже будет заложен в цене товара, т.е. цена товара будет отображаться с учётом налога. Сам налог в расчётах, в корзине и при оформлении отображаться не будет, в независимости от того, включен ли он в "Учитывать в заказе". Для работы этой опции требуется включить "Отображать цены с налогом".</span>';
Файл: admin\controller\setting\setting.php
Действие:
ищем блок
$this->data['entry_tax'] = $this->language->get('entry_tax');
Изменения: после этого блока добавляем:
// Вкл_Выкл - налог в цене товара
$this->data['tax__tax_in_price'] = $this->language->get('tax__tax_in_price');
Действие:ищем блок:
if (isset($this->request->post['config_tax'])) {
$this->data['config_tax'] = $this->request->post['config_tax'];
} else {
$this->data['config_tax'] = $this->config->get('config_tax');
}
Изменения: после этого блока добавляем:
// Вкл_Выкл - налог в цене товара
if (isset($this->request->post['config_tax__tax_in_price'])) {
$this->data['config_tax__tax_in_price'] = $this->request->post['config_tax__tax_in_price'];
} else {
$this->data['config_tax__tax_in_price'] = $this->config->get('config_tax__tax_in_price'); }
Файл: БД
Действие: Добавляем переменную в таблицу setting.
Изменения:
INSERT INTO `Имя Вашей БД`.`Имя Вашей таблицы setting` (`store_id` ,`group` ,`key` ,`value` ,`serialized`)
VALUES ('0', 'config', 'config_tax__tax_in_price', '0', '0'); - это SQL-код для PHPMyAdmin
Всё. Новый пункт меню отображается в админке.
Логика
Файл:\system\library\cart.php
Действие:
Найти блок
if (!$product_query->row['quantity'] || ($product_query->row['quantity'] < $quantity)) {
$stock = false;
Изменения: после этого блока добавляем:
// Налог в цене товара
// Учитываем только, если в настройках включено "Отображать цены с налогом" и "Налог в цене товара"
if ( $this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') ) {
// Оригинальная цена товара без учёта налога
$original_price = $price + $option_price;
// Цена товара с учётом налога
$taxtotal = $this->tax->calculate(($price + $option_price), $product_query->row['tax_class_id'], $this->config->get('config_tax'));
} else {
// Оригинальная цена товара без учёта налога
$original_price = $price + $option_price;
// Цена товара с учётом налога
$taxtotal = $price + $option_price;
}
////////////////////////
Действие: Найти блок
'price' => ($price + $option_price),
'total' => ($price + $option_price) * $quantity,
Изменения:Комментируем найденный блок, вместо него добавляем:
// Новые значения
////////////////////
'original_price' => $original_price,
'original_total' => $original_price * $quantity,
'price' => $taxtotal,
'total' => ($taxtotal * $quantity),
////////////////////
Файл: \catalog\controller\checkout\cart.php
Действие:
Найти блок:
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$total = $this->currency->format($this->tax->calculate($product['total'], $product['tax_class_id'], $this->config->get('config_tax')));
} else {
$total = false;
}
Изменения: Комментируем найденный блок, вместо него добавляем:
// Налог в цене товара
// Отображение в обычной корзине
// Учитываем только, если в настройках включено "Отображать цены с налогом" и "Налог в цене товара"
if ( $this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') ) {
// Цена товара с учётом налога
$price = $this->currency->format($this->tax->calculate($product['original_price'], $product['tax_class_id'], $this->config->get('config_tax')));
// Цена всех товаров (ИТОГО) с учётом налога
$total = $this->currency->format($this->tax->calculate($product['original_total'], $product['tax_class_id'], $this->config->get('config_tax')));
} else {
// Цена товара без учёта налога
$price = $this->currency->format($product['price']);
// Цена всех товаров (ИТОГО) без учёта налога
$total = $this->currency->format($product['total']);
}
// Если в настройках указано, что "Не показывать цены гостям" и пользователь не залоген, то скрываем цену и ИТОГО
if ( $this->config->get('config_customer_price') && !$this->customer->isLogged() ) {
$price = false;
$total = false;
}
////////////////////////
Действие:Найти блок:
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$total = $this->currency->format($this->tax->calculate($result['total'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$total = false;
}
Изменения: Комментируем найденный блок, вместо него добавляем:
// Налог в цене товара
// Отображение в верхней корзине
// Учитываем только, если в настройках включено "Отображать цены с налогом" и "Налог в цене товара"
if ( $this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') ) {
// Цена товара с учётом налога
$price = $this->currency->format($this->tax->calculate($result['original_price'], $result['tax_class_id'], $this->config->get('config_tax')));
// Цена всех товаров (ИТОГО) с учётом налога
$total = $this->currency->format($this->tax->calculate($result['original_total'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
// Цена товара без учёта налога
$price = $this->currency->format($result['price']);
// Цена всех товаров (ИТОГО) без учёта налога
$total = $this->currency->format($result['total']);
}
// Если в настройках указано, что "Не показывать цены гостям" и пользователь не залоген, то скрываем цену и ИТОГО
if ( $this->config->get('config_customer_price') && !$this->customer->isLogged() ) {
$price = false;
$total = false;
}
///////////////////////
Файл:
\catalog\model\total\tax.php
Действие:
Найти блок:
$total += $value;
Изменения: Закомментировать
Действие:
Добавить в конец файла
Изменения:
// Налог в цене товара
// Учитываем только, если в настройках включено "Отображать цены с налогом" и "Налог в цене товара"
if ($this->config->get('config_tax') && !$this->config->get('config_tax__tax_in_price')) {
$total += $value;}
////////////////
Налог в корзине и при оформлении заказа – управление показом
Файл:catalog\view\theme\default\template\checkout\cart.tpl
Действие:
Найти блок:
<?php foreach ($totals as $total) {
Изменения: Добавить после найденного блока:
// Налог в цене товара
// Пропускаем отображение налога, если в настройках включено "Отображать цены с налогом", "Налог в цене товара" и сейчас пытается отобразиться модуль налогов ($total['code'] == 'tax')
if ($this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') && ($total['code'] == 'tax') ) {continue;}
//////////////////
Файл:
catalog\view\theme\default\template\common\cart.tpl
Действие:
Найти блок:
<?php foreach ($totals as $total) {
Изменения:Добавить после найденного блока:
// Налог в цене товара
// Пропускаем отображение налога, если в настройках включено "Отображать цены с налогом", "Налог в цене товара" и сейчас пытается отобразиться модуль налогов ($total['code'] == 'tax')
if ($this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') && ($total['code'] == 'tax') ) {continue;}
//////////////////
Файл:
\catalog\view\theme\default\template\checkout\confirm.tpl
Действие:
Найти блок:
<?php foreach ($totals as $total) {
Изменения: Добавить после найденного блока:
// Налог в цене товара
// Пропускаем отображение налога, если в настройках включено "Отображать цены с налогом", "Налог в цене товара" и сейчас пытается отобразиться модуль налогов ($total['code'] == 'tax')
if ($this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') && ($total['code'] == 'tax') ) {continue;}
//////////////////
=======================
Добавления от 13 марта (Отображения в Личном кабинете - заказы)
Файл:
\catalog\view\theme\default\template\account\order_info.tpl
Действие:
Найти блок:
<?php foreach ($totals as $total) {
Изменения: Добавить после найденного блока:
// Налог в цене товара
// Пропускаем отображение налога, если в настройках включено "Отображать цены с налогом", "Налог в цене товара" и сейчас пытается отобразиться модуль налогов ($total['code'] == 'tax')
if ($this->config->get('config_tax') && $this->config->get('config_tax__tax_in_price') && ($total['code'] == 'tax') ) {continue;}
//////////////////
=======================Если где-то ошибся, надеюсь, кто-то из более опытных исправит.
Также хотелось, чтобы данное дополнение вошло в сборку ocstore. :oops:
Изменения в SVN, кроме вышеперечисленного:
В файле opencart.sql
Вставить после строки:
INSERT INTO `oc_setting` (`setting_id`, `store_id`, `group`, `key`, `value`, `serialized`) VALUES
строчку
( 34573, 0, 'config', 'config_tax__tax_in_price', '0', 0);
================================
В файле upgrade.sql
Вставить строчку
INSERT INTO oc_setting (store_id, group, key, value, serialized) VALUES (0, 'config', 'config_tax__tax_in_price', '0', 0);На счёт этой строки не уверен - нужно проверить