Цена по Акции без пересчета, 2.1.0.1 (rs.2)

Тема в разделе "Общие вопросы", создана пользователем 6yka, 15 ноя 2015.

  1. 6yka

    6yka Пользователь

    Сообщения:
    37
    Симпатии:
    1
    Господа.

    У меня есть 2 валюты. Евро и Рубли. Цены я по умолчанию ставлю в евро, они меняются в зависимости от моего курса евро.

    Нужно:
    Для цены "Акция" чтобы не было пересчета, она выставлялась как написано.

    Например:
    Цена товара 100 евро, курс стоит 70, показывает цену 7000р. - все хорошо
    Мне надо назначить акционную цену в рублях не зависимо от евро.
    Вкладка Акция: ставлю 6000р. , нужно чтобы показывало 6000р., а не 420 000р. (с пересчетом курса).

    Спасибо!
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    3.891
    Симпатии:
    937
    Как то не тянет, на обычный вопрос, который вот так с наскока можно решить, более подходит на разработку.. (~2т.р.)
     
  3. 6yka

    6yka Пользователь

    Сообщения:
    37
    Симпатии:
    1
    в файле
    html/catalog/controller/product/product.php
    вставил и закомментил строку
    Код:
    if ((float)$result['special']) {
            //        $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
    $special = $this->currency->format($result['special'], 'RUB', 1);
                    } else {
                         $special = false;
                    } 
    Теперь выводит цену акции, как указано во вкладке Акция умножая на 1, а не курс.
    По аналогии тоже самое в самом каталоге.

    Но возникла проблема - это корзина:

    Там цена выводится так:
    Код:
    // Display prices
                    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;
                    }
       
    
                    // Display prices
                    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                        $total = $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity']);
                    } else {
                        $total = false;
                    }
    Не понятно как тут быть, т.к. в корзине все еще идет пересчет
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    3.891
    Симпатии:
    937
    потому что корзина проходит через библиотеку library/cart.php
    Посмотрите пример начиная от комментария //Special
     
  5. 6yka

    6yka Пользователь

    Сообщения:
    37
    Симпатии:
    1
    в этот файле, как я понял, за специальную цену отвечает этот код:
    Код:
    // Product Specials
                    $product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");
    
                    if ($product_special_query->num_rows) {
                        $price = $product_special_query->row['price'];
                    }
    
    не понимаю где здесь идет пересчет с курса и что дописать

    эта функция отвечает за подсчет суммы:
    Код:
        public function getTotal() {
            $total = 0;
    
            foreach ($this->getProducts() as $product) {
                $total += $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'];
            }
    
            return $total;
        }
     
  6. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    пересчет курса идет в библиотеки currency.php
    В библиотеки корзины, то что запишется последним в $price, то такая цена и попадет в корзину.
    В контроллере корзины там уже с помощью вышеуказанной библиотеки пересчитывается на текущий курс и показывается покупателю.