Что проще для поддержания актуальной цены?

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

  1. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    Итак суть вопроса такова
    имеется магазин (в будущем ИМ)
    в РБ цены зависят от евро
    по законодательству - цены только в белках
    1 вариант - выставить в админке цену в евро (3,85) а каким то образом цена в евро превращается в белорусские по курсу НБРБ (23 650)
    3.85*23650=91052.5
    но нужно округление до 95.000 либо до 100.000, т.е. чтобы цена была красивая
    и забыть практически на то, что: "А вот у вас на сайте..."
    или как сделать это проще?
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    была же как раз тема как то про округление стоимости? не пробовали или не нашли?
     
  3. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    Vlad, основной упор на то, что только белки+округление
    а так получается выбор между двумя валютами
    по законодательству - цены только в белках
    т.е. не должно быть выбора между валютами
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    это убирается, как минимум просто скрывается значек выбора.
     
    Zhezkazganetcs нравится это.
  5. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    с ценой разобрался
    осталось только округлить
    но округлить до 1.000
    чтобы вместо 2.370.773 получилось 2.371.000
    сделал
    Код:
    UPDATE oc_product SET price = ROUND(price)
    но на рублях по-ходу не отражается
     
  6. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
  7. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    Vlad, мне нужно округлить до тысяч
    у нас в РБ и тысячи, и миллионы рублей
    а пятьдесят рублей уже отменили
    поэтому если сумма 1.934.500 (один миллион девятьсот тридцать четыре тысячи пятьсот) то должно быть 1.935.000 (один миллион девятьсот тридцать пять тысяч)
     
  8. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    предварительно поделить на 1000, потом округлить и умножить на 1000
     
  9. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    131
    так не поможет, в контроллере catalog\controller\product\product.php
    после строки
    PHP:
    $product_info $this->model_catalog_product->getProduct($product_id);
    вставить
    PHP:
    $product_info['price']=round($product_info['price'], -3);
    вероятнее еще добавить проверку на существование такой переменной
     
  10. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    @tsap округление в контроллере, это не значит округление стоимости товара. В корзину то стоимость попадает не из контроллера товара...
     
  11. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    221
    как вариант в \system\library\currency.php сделать округление. Если память не изменяет, то в этом коде нужно вносить изменения
    PHP:
    if ($value) {
                
    $value $value;
            } else {
                
    $value $this->currencies[$currency]['value'];
            }

            if (
    $value) {
                
    $value = (float)$number $value;
            } else {
                
    $value $number;
            }
    Да... проблем может не возникнуть, но все таки может быть, что при n-заказе может появиться лишняя тысяча.
     
  12. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    tsap, неа, не работает
    RoS, дак что изменить?
     
  13. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    221
    это
    PHP:
    if ($value) {
                
    $value $value;
            } else {
                
    $value $this->currencies[$currency]['value'];
            }
    на
    PHP:
    if ($value) {
                  
    $value round($value,3);
            } else {
                  
    $value $this->currencies[$currency]['value'];
            }
     
  14. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    131
    разве
    а не
    PHP:
    if ($value) {
                
    $value = (float)$number $value;
            } else {
                
    $value $number;
            }
    на
    PHP:
    if ($value) {
                
    $value round((float)$number $value3);
            } else {
                
    $value round($number3);
            }
     
  15. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    не парни
    не работает
     
  16. tsap

    tsap Продвинутый пользователь

    Сообщения:
    230
    Симпатии:
    131
    я это понимаю, что с моим "костылем" (как оказалось не рабочим) придется менять по всем контроллерам где встречается price
    вникая в проблему у меня три решения:
    1. вносить сразу округленные цены
    2. округлять на уровне ядра/контроллеров (round(price, -3))
    3. писать триггер в БД, чтобы какие цены не попадали в БД, триггер приводил их к заданному образцу.
     
  17. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    [решено частично]
    catalog/model/catalog/product.php
    заменить
    Код:
    'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
    на
    Код:
    'price'            => round(($query->row['discount'] ? $query->row['discount'] : $query->row['price']),-1),
    в моем случае на -3 или на -5
    пока тестирую
    [/решено частично]
    осталось в корзине округлить до актуальной цены
     
    Последнее редактирование: 1 мар 2016
  18. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    221
    вот так
    PHP:
    if ($value) {
                  
    $value $value;
            } else {
                  
    $value $this->currencies[$currency]['value'];
            }

            if (
    $value) {
                
    $value = (float)$number round($value,-3);
            } else {
                
    $value $number;
            }
    Вроде в корзине тоже заработало. Но надо тестить
     
  19. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    system\library\currency.php
    неа
    не заработало
    все цены на ноль
     
  20. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    221
    Я на чистой системе попробовал, заработало. Причем как вы говорили админка в евро, а на сайте БР