Jump to content

Неправильная конвертация валют в комбинациях.


KatiaW

Recommended Posts

Здравствуйте.

 

Создаю каталог в Престашоп 1.6.1.1.

 

Валюта по умолчанию - евро (все цены в админ панели задаю в евро), вторая - российский рубль.

Курс валют обновляется автоматически.

 

Товар имеет три комбинации с разными ценами.

При просмотре магазина в евро валюте можно видеть следующие цены для каждой комбинации:

5,50€ / 15,00€ / 49,00€

 

При просмотре в рублях:

404 руб / 413 руб / 447 руб

 

Первую комбинацию считает правильно, так как 5,50€ = 404 руб (по сегодняшнему курсу 73,45 руб)

Эта комбинация не имеет "влияния на цену". Стоимость этого продукта указана как "розничная цена" во вкладке "цены".

 

Вторая комбинация имеет "влияния на цену" увеличивая ее на 9,50€. Однако на практике программа считает их как 9 рублей, а правильная цена должна быть 1.101 рубль.

С третьей комбинацией такая же проблема.

 

То есть проблема возникает именно при добавлении сумм во вкладке "комбинации / влияние на цену". Несмотря на то, что валюта по умолчанию это евро, программа принимает их за рубли.

 

Что это за баг и как можно исправить эту проблему?

 

Заранее спасибо!

post-1104932-0-84470000-1443648928_thumb.jpg

Edited by KatiaW (see edit history)
  • Like 1
Link to comment
Share on other sites

Может цены проставить у комбинаций не через влияние на цену, а задать фактическую цену каждой комбинации.

 

Мне бы хотелось использовать этот вариант, но в генераторе комбинаций есть только опция: "Влияние на Цену Товара". Может я не туда смотрю...

Вы можете указать путь в админ панели где можно задать фактические цены для каждой комбинации?

Link to comment
Share on other sites

При установке фиксированной цены для комбинаций во вкладке "цены/специальные цены", стоимость в евро отображается нормально: 5,50 € / 15 € / 49

При переходе на рубли отображается: 404 руб. / 15 руб. / 49 руб.

То есть опять первую комбинацию считает нормально, вторую и третью не считает вообще. Оставляет то же значение (сумму), меняет только знак валюты.

 

Очень нужна помощь. При таком баге невозможно открыть магазин.... :(

post-1104932-0-47279700-1443738178_thumb.jpg

Edited by KatiaW (see edit history)
  • Like 1
Link to comment
Share on other sites

присоединяюсь к вопросу

основная валюта - евро, дополнительная валюта - белорусский рубль. на магазин выводится только рубль и нет смены валюты.

первая комбинация товара считается верно (например 136 евро и перевод по текущему курсу). при увеличении на 5 евро в другой комбинации пишет что финальная стоимость - 141, но фактически отображает 136 евро (по курсу) + 5 рублей

если задать базовую стоимость 0, а в комбинациях продукта ставить увеличение цены и ставить реальную цену (в евро), то в магазине не происходит пересчет по курсу, а выводится стоимость 1 к 1. .т.е. 136 евро = 136 рублей.

upd. похоже проблема только в отображении цены (а не в самой цене), т.к. при добавлении в корзину продукта с "неправильной" ценой она становится - правильной...

Edited by mort (see edit history)
  • Like 2
Link to comment
Share on other sites

  • 4 weeks later...

Могу поправить, смотри сообщение от меня.

Добрый день. 

Столкнулся с подобной проблемой. Пока решения не нашёл.

Полностью описал здесь: http://prestashop-forum.ru/index.php/topic,5327.msg32744.html#msg32744

если нужно, продублирую здесь.

Ссылка на сайт: http://178.151.206.206/warehouse/napolnaya-akustika/8-monitor-audio-pl-300.html

Edited by aleksey_z (see edit history)
  • Like 1
Link to comment
Share on other sites

aleksey_zу вас тоже самое что и у меня. при добавлении в корзину видно что стоимость расчитана верно, но при выборе комбинации в карточке товара влияние на цену действует как +300, а должно +300*курс гривны.

выше Kerm предлагал свою помощь, но я пока отложил решение этого вопроса

Link to comment
Share on other sites

А можно чуточку по-подробнее. Я с устройством сайта знаком всего 2 месяца.

 

Валюты у меня пересчитываются вроде верно, но цену комбинации, для не дефолтной валюты, просто увеличивает на заданное значение, а не пересчитывает по курсу.

Изменение строк решит эту проблему?

Я так понял, нужно заменить строки в файле product.js, где его искать (директория)?

$('#our_price_display').text(formatCurrency(priceWithDiscountsDisplay, currencyFormat, currencySign, currencyBlank)).trigger('change');

на 

$('#our_price_display').text(formatCurrency(priceWithDiscountsDisplay * currencyRate, currencyFormat, currencySign, currencyBlank)).trigger('change');

и после неё добавить

if(currencyRate !=1){
if(typeof discountPercentage !== "undefined")
{ basePriceDisplay = basePriceDisplay * currencyRate; }
}

И не совсем понял, когда этот фикс не будет работать (Если товар в бэк-офисе имеет цену, комбинации не имеют цену, и если установленые цены комбинаций, используют специфические ценовые блоки, этот фикс не работает.

 

Спасибо.

Link to comment
Share on other sites

Kerm, поправили да не то.

данное предложение понимает выводимую в карточке товара стоимость как стоимость в дефолт валюте и умножает на указанный курс.

но фокус в том, что у меня дефолт валюта одна, а вывод на сайт в другой валюте (пользователю выбора валюты нету)

  • Like 1
Link to comment
Share on other sites

Проблема в /controllers/front/ProductController.php функция assignAttributesGroups строка

$combinations[$row['id_product_attribute']]['price'] ...

Цену нужно конвертировать

Link to comment
Share on other sites

Проблема в /controllers/front/ProductController.php функция assignAttributesGroups строка

$combinations[$row['id_product_attribute']]['price'] ...

Цену нужно конвертировать

быть может подскажете как? далёк от всего этого..

Link to comment
Share on other sites

Блин я дал ссылку на решение проблемы, там все расписано, ну неужели нельзя изучить там все, а не брать первую же строчку моей переписки с службой поддержкой и без понимания того что Вы делаете пытаться этими строчками поправить ошибки на своем магазине?

 

Изучайте prestashop, наймите программиста.

PS: Для тех кто в танке, по той ссылке вверху это описание проблемы, ее решение нужно искать в комментариях под ним в низу.

Link to comment
Share on other sites

to Kerm

 

Я почитал коменты, но все же (заменить строки в файле я смогу).

В своем файле я не нашел строк, кот. нужно заменить/добавить.  attachicon.gifцена комбинаций.png

 

 

Если Вы посмотрите выше, самое первое сообщение в теме. Там указана версия 1.6.1.1 и следовательно и решение для нее. Вы уверенны что у Вас именно эта версия?

 

Вам нужно внести эти изменения:

 

https://github.com/PrestaShop/PrestaShop/commit/40717fa6ec33427084bf3ec4a9c26f2c77acbdbc

 

После эти:

 

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

 

И в конце вот эти:

 

https://github.com/gRoussac/PrestaShop/commit/a87732c

Edited by Kerm (see edit history)
  • Like 1
Link to comment
Share on other sites

sors, спасибо. действительно в этой строке было дело

Спасибо большое, вроде получилось. Но если валюту выбрать доллар, то цена за пару выводится правильно. post-1122210-0-71328500-1445947464_thumb.png А если выбрать гривну, то выводится бред какой-то. post-1122210-0-37418200-1445947483_thumb.png

 

P.S. Да в гривне не правильно выводится цена за 1 шт. post-1122210-0-34616300-1445947766_thumb.png

Edited by aleksey_z (see edit history)
Link to comment
Share on other sites

aleksey_z, если будете эксперементировать с файлами указанными тут - не забудьте сделать бекап.

лично у меня после совета по ссылке https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

магазин вообще перестает работать - "ошибка сервера 500"

Link to comment
Share on other sites

Спасибо большое, вроде получилось. Но если валюту выбрать доллар, то цена за пару выводится правильно. attachicon.gifцена комбинаций2.png А если выбрать гривну, то выводится бред какой-то. attachicon.gifцена комбинаций1.png

 

P.S. Да в гривне не правильно выводится цена за 1 шт. attachicon.gifцена комбинаций3.png

обратите внимание, что "цена за пару" у вас получается перемножением цены в гривнах (259 200) на текущий курс (24).

Link to comment
Share on other sites

aleksey_z, если будете эксперементировать с файлами указанными тут - не забудьте сделать бекап.

лично у меня после совета по ссылке https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

магазин вообще перестает работать - "ошибка сервера 500"

Спасибо. Я пока только изменил файл сайт/controllers/front/ProductController.php, две строки, как Вы и написали. Результат выше. Нужно где-то, что-то ещё менять?

Edited by aleksey_z (see edit history)
Link to comment
Share on other sites

обратите внимание, что "цена за пару" у вас получается перемножением цены в гривнах (259 200) на текущий курс (24).

да, пересчитал, так и есть. Почему так? 

Link to comment
Share on other sites

логично предположить что где-то происходит "лишнее" умножение на курс.

а вот где, я не знаю =( не в моих компетенциях эта магия

Link to comment
Share on other sites

Обратите внимание что файл product.js править не нужно. Возможно Вы прочитали мое сообщение по первой ссылке и внесли из него правки в файл product.js. Не каких изменений в этот файл вносить не нужно.

Link to comment
Share on other sites

Обратите внимание что файл product.js править не нужно. Возможно Вы прочитали мое сообщение по первой ссылке и внесли из него правки в файл product.js. Не каких изменений в этот файл вносить не нужно.

Ничего не трогал. Только это

Link to comment
Share on other sites

А как же правки в файле Product.php?

всё (?) решается и без этих правок.

как я писал выше - попытка внести правки в этот файл - "крашит" магазин.

Link to comment
Share on other sites

А как же правки в файле Product.php?

Я их не делал, ибо сразу не нашёл нужные строки, о чем и писал выше.

Пока ждал ответа, mort отписался о решении проблемы заменой 2-х строк в файле сайт/controllers/front/ProductController.php

Больше ничего не трогал.

Edited by aleksey_z (see edit history)
Link to comment
Share on other sites

всё (?) решается и без этих правок.

как я писал выше - попытка внести правки в этот файл - "крашит" магазин.

 

Я их не делал, ибо сразу не нашёл нужные строки, о чем и писал выше.

Пока ждал ответа, mort отписался о решении проблемы заменой 2-х строк в файле сайт/controllers/front/ProductController.php

Больше ничего не трогал.

 

 

ооо нашлись специалисты, сразу видно. В файле Product.php вносить изменения нужно обязательно!

 

Первое, о чем я уже писал, тема про ошибку в версии 1.6.1.1, если у Вас версия ниже, то Вам необходимо либо обновиться, либо выйти из этой темы и не задавать больше глупых вопросов.

 

Второе, только что скачал архив с престой 1.6.1.1, в нем взял файл из classes/Product.php.

 

Изменение в нем нужно внести согласно этим двум ссылкам:

 

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

 

Делам поиск по коду ( if (isset(self::$_prices[$cache_id])) { ) и о боже! На 2942 строчке мы на ходим нужный код!

 

Берем код:

 

        if (isset(self::$_prices[$cache_id])) {
            return self::$_prices[$cache_id];
        }

 

И меняем его на:

 

if (isset(self::$_prices[$cache_id])) {
	/* Affect reference before returning cache */
	if (isset($specific_price['price']) && $specific_price['price'] > 0) {
	     $specific_price['price'] = self::$_prices[$cache_id];
	}
	return self::$_prices[$cache_id];
}

 

Далее по аналогии ищем строчку с кодом ( if (!$specific_price || !($specific_price['price'] >= 0 && $specific_price['id_currency'])) { ), строка эта 2995 (с учетом вставленного предыдущего кода), и меняем это:

 

 

if (!$specific_price || !($specific_price['price'] >= 0 && $specific_price['id_currency'])) {
            $price = Tools::convertPrice($price, $id_currency);
}

На это:

 

 

if (!$specific_price || !($specific_price['price'] >= 0 && $specific_price['id_currency'])) {
	$price = Tools::convertPrice($price, $id_currency);
	if (isset($specific_price['price'])) {
		$specific_price['price'] = $price;
	}
}

Все там строчки есть и ошибок они после их изменения на сайте не выводят!

Для тех кто в танке, красные строчки в коде github'e, откуда мы код берем, со знаком минус, означают старые строчки, которые были заменены зелеными строчками, со знаком плюс.

Edited by Kerm (see edit history)
  • Like 1
Link to comment
Share on other sites

 

На сколько я вижу, по твоему же скриншоту, ты вставил код с плюсиками из github. Будь внимательнее!

 

Да и вообще, включение отображения ошибок в defines.inc.php иногда помогает узнать в чем дело...

Edited by Kerm (see edit history)
Link to comment
Share on other sites

post-1106058-0-62785000-1446038188_thumb.png

Все там строчки есть и ошибок они после их изменения на сайте не выводят!

строчки есть. если вы посмотрите 18 комментарий то я про это писал.

ошибки на сайте они не выводят. согласен. они просто его "крашат"

теперь вопрос - если все работает и без правок в файле php то зачем их вносить?

 

 

Link to comment
Share on other sites

Kerm, прошу прощения за вероятно свою глупость, но насколько я вижу ваши советы несколько отличаются от приведенных вами ссылок.

например по ссылке

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

рекомендуется после:

if (isset(self::$_prices[$cache_id])) {

добавить:

 /* Affect reference before returning cache */
$specific_price['price'] = self::$_prices[$cache_id];

вы же советуете добавить:

 

 /* Affect reference before returning cache */
 if (isset($specific_price['price']) && $specific_price['price'] > 0) {
      $specific_price['price'] = self::$_prices[$cache_id];
 }

это связано с тем что автор исправления чуть позе в комментариях добавил у себя строку 2977?

Edited by mort (see edit history)
Link to comment
Share on other sites

Kerm, спасибо.

 

Presta 1.6.1.1, шаблон Warehouse 3.6.2

 

Заменил строки в Product.php, согласно Вашего сообщения и ранее в сайт/controllers/front/ProductController.php. Сайт работает, визуально ничего не изменилось, валюты конвертируются правильно, и при влиянии на цену, и в разных валютах; и со скидками.

Но есть косяк в выводе цены за шт. Если в дефолтной валюте (доллар), то показывает правильно, а если в любой другой валюте -  то правильно сконвертированную цену товара ещё раз умножает на курс, и в гривне, и в евро.

Ссылка на сайт

Edited by aleksey_z (see edit history)
Link to comment
Share on other sites

Kerm, спасибо.

 

Presta 1.6.1.1, шаблон Warehouse 3.6.2

 

Заменил строки в Product.php, согласно Вашего сообщения и ранее в сайт/controllers/front/ProductController.php. Сайт работает, визуально ничего не изменилось, валюты конвертируются правильно, и при влиянии на цену, и в разных валютах; и со скидками.

Но есть косяк в выводе цены за шт. Если в дефолтной валюте (доллар), то показывает правильно, а если в любой другой валюте -  то правильно сконвертированную цену товара ещё раз умножает на курс, и в гривне, и в евро.

Ссылка на сайт

 

Не могли бы Вы отключить сжатие кода?

Link to comment
Share on other sites

Kerm, прошу прощения за вероятно свою глупость, но насколько я вижу ваши советы несколько отличаются от приведенных вами ссылок.

например по ссылке

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

рекомендуется после:

if (isset(self::$_prices[$cache_id])) {

добавить:

 /* Affect reference before returning cache */
$specific_price['price'] = self::$_prices[$cache_id];

вы же советуете добавить:

 

 /* Affect reference before returning cache */
 if (isset($specific_price['price']) && $specific_price['price'] > 0) {
      $specific_price['price'] = self::$_prices[$cache_id];
 }

это связано с тем что автор исправления чуть позе в комментариях добавил у себя строку 2977?

 

да

Link to comment
Share on other sites

Kerm

 

Обновился до 1.6.1.2, а в ней та же балда! 

 

Подскажите, исправлять там же?

 

P.S.  Нашёл нужные строки, заменил, снова работает. 

НО цену за 1 штуку товара (если указываем) выводит правильно только для дефолтной валюты. Для других валют неправильно.

Это неисправимо? Даже в новой версии? Или всё же где-то я не до-настроил?

Edited by aleksey_z (see edit history)
Link to comment
Share on other sites

Если Вы посмотрите выше, самое первое сообщение в теме. Там указана версия 1.6.1.1 и следовательно и решение для нее. Вы уверенны что у Вас именно эта версия?

 

Вам нужно внести эти изменения:

 

https://github.com/PrestaShop/PrestaShop/commit/40717fa6ec33427084bf3ec4a9c26f2c77acbdbc

 

После эти:

 

https://github.com/PrestaShop/PrestaShop/commit/0eecc7a3dbbace04216a84529bcefe4b0fd59f1f

 

И в конце вот эти:

 

https://github.com/gRoussac/PrestaShop/commit/a87732c

 

ОГРОМНЫЙ СПС, прочитал, заменил тупо на весь код два файла и всё работает на 1.6.1.1. отлично.

Кто в танке, зайдете ВКонтакт (https://vk.com/topic-106155073_33086059), скачаете тупо оба файла заплатки (на текущий момент) и будет вам счастье.

 

Еще раз спс модератору, вторую неделю голову ломал.

Link to comment
Share on other sites

  • 2 months later...

Вроде пофиксили эту проблему в Престе 1.6.1.4.

 

Да все равно хрень какая то, у меня клиент есть один замороченный, там у товара проставлены цены к каждой комбинации в евро, на сайте они в рублях и установлена скидка к примеру 20% через правило каталога...и в общем когда добавляешь товар в корзину то в сплывающей окне и блоке корзины показывает цену товара 0 и в самой корзине тоже у товара цена 0...мучаюсь тут не знаю в чем дело..

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

Вроде пофиксили эту проблему в Престе 1.6.1.4.

Изменения в файлах есть, а вот проблема так и осталась. Сегодня клиент указал на огромное различие стоимости товара в разных валютах (комбинация по объёму). В валюте магазина всё ОК. При изменении валюты вылезает полная чушь.

Если кто-то может помочь с решением (не бесплатно) - пишите в личку.

Link to comment
Share on other sites

У меня 1.6.1.4  :(

 

Update: Решения для 1.6.1.4 не нашёл. Скачал дистрибутив 1.6.1.1, вытащил оттуда ProductController.php и заменил у себя на сайте.

Почему-то это помогло, и даже редактировать ничего не пришлось. 

Edited by thaihealth (see edit history)
Link to comment
Share on other sites

Изменения в файлах есть, а вот проблема так и осталась. Сегодня клиент указал на огромное различие стоимости товара в разных валютах (комбинация по объёму). В валюте магазина всё ОК. При изменении валюты вылезает полная чушь.

Если кто-то может помочь с решением (не бесплатно) - пишите в личку.

по совету Kerm пробовали вносить изменения?

я руками исправил и выше 1.6.1.1. не переходил

Link to comment
Share on other sites

Во оно как!

У меня сайт в стадии создания, все не проверял. После обновления на 1.6.1.4 собрался в очередной раз подправлять код (по советам выше), но заметил, что цены правильно пересчитались, и в коде увидел строки, которые ранее меняли. Дальше не вникал, наполняю товаром. Т.е. косяки с пересчетом остались?

Link to comment
Share on other sites

Во оно как!

У меня сайт в стадии создания, все не проверял. После обновления на 1.6.1.4 собрался в очередной раз подправлять код (по советам выше), но заметил, что цены правильно пересчитались, и в коде увидел строки, которые ранее меняли. Дальше не вникал, наполняю товаром. Т.е. косяки с пересчетом остались?

 

Да, но при "узких/замароченных" настройках сайта.

Edited by Kerm (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Та же беда!


шаблон Warehouse 3.6.2


Проверил указанные файлы, все строки уже заменены на правильные, версия престы 1,6,1,4.


Сайт работает, визуально ничего не изменилось, валюты конвертируются правильно, и при влиянии на цену, и в разных валютах; и со скидками.


Но есть косяк в выводе цены за шт. Если в дефолтной валюте (евро), то показывает правильно, а если в любой другой валюте -  то правильно сконвертированную цену товара ещё раз умножает на курс, как как будто идет двойное умножение, к примеру Цена за шт.14 евро, в рублях = 1120, но при добавлении любой комбинации к товару цена за шт. становится 89 705,31... подскажите куда копать?! Я заметил что не у меня одного эта проблема...


Link to comment
Share on other sites

 

Та же беда!

шаблон Warehouse 3.6.2

Проверил указанные файлы, все строки уже заменены на правильные, версия престы 1,6,1,4.

Сайт работает, визуально ничего не изменилось, валюты конвертируются правильно, и при влиянии на цену, и в разных валютах; и со скидками.

Но есть косяк в выводе цены за шт. Если в дефолтной валюте (евро), то показывает правильно, а если в любой другой валюте -  то правильно сконвертированную цену товара ещё раз умножает на курс, как как будто идет двойное умножение, к примеру Цена за шт.14 евро, в рублях = 1120, но при добавлении любой комбинации к товару цена за шт. становится 89 705,31... подскажите куда копать?! Я заметил что не у меня одного эта проблема...

 

 

Я так понимаю что они не спешат фиксить это и более того походу были полностью брошены все фиксы багов для 1.6, они сейчас ссконцентрированы все только на 1.7 версии.

Link to comment
Share on other sites

  • 8 months later...

Приветствую. Кто-нибудь добрался до места где это двойное умножение делается? Версия 1.6.1.9, косяк остался.

 

 

UPD. Проблема не в самом движке, а в шаблонах. После установки шаблона возникает данный косяк. Со стандартным шаблоном все работает.

Edited by san-sanych (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now