Округление до сотен (5 678 -> 5 700)

Тема в разделе "Общие вопросы", создана пользователем al74, 11 янв 2016.

  1. al74

    al74 Новичок

    Сообщения:
    11
    Симпатии:
    1
    Здравствуйте!
    Подскажите пожалуйста, как и где происходит вычисление сумм по нескольким товарам, итоговым сумм и т..д., в каком направлении копать.
    Проблема следующая,
    цена товар указана в долларах, и пересчитывается по курсу, цифра естественно получается не очень красивая, встал вопрос по округлению до сотен. На одном из форумов было предложено следующее решение, в файле .system/library/currency.php поменять строку
    PHP:
    $string .= number_format(round($value,(int)$decimal_place),(int)$decimal_place$decimal_point$thousand_point);
    на
    PHP:
    $string .= number_format(round($value,-2),(int)$decimal_place$decimal_point$thousand_point);
    В результате в при отображении самого товара цена получилась как надо, но вот в корзине и в форме заказа,цена товара и сумма, если товара больше одного, стали разъезжаться
    pp.JPG
    т.е. цена после умножения на курс равна 10447, после округления стала 10400, но цена за 2 шт. равна 20895, и после округления этой цифры получаем 20900, хотя надо бы что бы было 20800.
    По хорошему, надо что бы итоговые суммы считались от уже округленной цены за единицу товара.
    Может кто то сталкивался с такой проблемой, по возможности подскажите в каком направлении копать.
     

    Вложения:

  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.064
    Симпатии:
    853
  3. al74

    al74 Новичок

    Сообщения:
    11
    Симпатии:
    1
    В общем, проблему можно решить выносом множителя количества товара за curency, т.е. изначально происходит умножение первичной цены на количество выбранного товара, потом умножение на курс, достаточно вынести $product['quantity'] за currency и сумма начинает биться с округленной ценой за единицу.
    Изменения в форме корзины:
    PHP:
      <file path="catalog/controller/checkout/cart.php">
      <
    operation>
      <
    search position="replace" offset="1"><![CDATA[
      
    $total $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity']);
      ]]></
    search>
      <
    add><![CDATA[
      
    $total = ($this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax'))) ) * $product['quantity'];
      ]]></
    add>
      </
    operation>
      </
    file>
    изменения в форме заказа: (у меня симпл, если форма заказа стандартная то надо исправить путь)
    PHP:
      <file path="catalog/controller/checkout/simplecheckout_cart.php">
      <
    operation>
      <
    search position="replace" offset="1"><![CDATA[
      
    $total $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity']);
      ]]></
    search>
      <
    add><![CDATA[
      
    $total = ($this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax'))) ) * $product['quantity'];
      ]]></
    add>
      </
    operation>
      </
    file>
    Еще вопрос, подскажите где описана форма выпадающего окна корзины, там тоже надо исправить, что то ни как не могу найти...
     
    Vlad нравится это.
  4. Vlad

    Vlad Эксперт

    Сообщения:
    3.906
    Симпатии:
    938
    Один вопрос = одна тема (на будущее)

    контролер \catalog\controller\common\cart.php
    шаблон \catalog\view\theme\default\template\common\cart.tpl
     
  5. al74

    al74 Новичок

    Сообщения:
    11
    Симпатии:
    1
    Спасибо, в комоне что то я и не посмотрел, в общем в \catalog\controller\common\cart.php
    делаем тоже что и в предыдущих, тогда строковая сумма по одному товару в выпадающем окне корзины выравнивается.
    Еще бы найти где суммируется итоговая сумма по всем товарам...