Jump to content
Sign in to follow this  
kiggo

Округление общей стоимости товара

Recommended Posts

Ситуация следующая:

 

Цена всего товара на сайте (в админ части) введена в $ (т.к. все импорт), на сайте покупателю выводит стоимость в грн, в присчёте по курсу на сегодня Цены в большинстве случаев с центами ( пример – 8,37 $).

Специфика товара в том, что как правило заказывают мин 2 -3 единицы.

В результате чего из-за округления стоимости, общая сумма не являете не правильной.

 

Например:

 

1 товар стоит (8,37$) – по курсу гривны к $ (8,37 * 24,4=204,23 грн), естественно на карточке товара цена округляется до 204 грн. Но возникает проблема при заказе большего количества – например 7шт.

Умножение производиться не по целой стоимости в 204 грн., а естественно по стоимости 204,23грн.

204*7=1428 грн

204,23*7=1430 грн. (естественно с округлением)

Вот и выходит разница в 2 грн.

Может кто подскажет как это можно исправить ?

Share this post


Link to post
Share on other sites

Подскажет...

В таком случае нужно округять  до умножения

 

т.е 204,23  ~ 204

 

т.е не

round (($price * $quantity) * $currency_value)

 

а round($price * $currency_value) ** $quantity

Share this post


Link to post
Share on other sites

В целом Ваша мысль ясна.

Только вот, в cart.php :

// 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;
}
Если не трудно ... Edited by afwollis
[code][/code]

Share this post


Link to post
Share on other sites

Мне проще это сделать, чем рассказать

 

ну вот же

 

попробуйте

 

$total = $this->currency->format($this->tax->calculate($product['price'] * $product['quantity'], $product['tax_class_id'], $this->config->get('config_tax')) );

Share this post


Link to post
Share on other sites

Не сомневаюсь в Вашей компетенции, но что то не помогло.

Share this post


Link to post
Share on other sites

Я не проверял свое предположение

 

Нужно делать тест на реальных данных

 

 

А что не помогло?

Не заработало?

А вот

 

тут скорей всего нужен небольшой хак

 

$total = $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'],false);

$total = $this->currency->format($total,'',1, true);

Share this post


Link to post
Share on other sites

а не проще ли воспользоваться готовым модулем?

https://opencartforum.com/files/file/2170-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D0%B0%D0%BB%D1%8E%D1%82%D0%BD%D1%8B%D0%B5-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B/

 

5 видов округления, на любой вкус

Share this post


Link to post
Share on other sites

И оно будет округлять тотал?

Share this post


Link to post
Share on other sites

Я не проверял свое предположение

 

Нужно делать тест на реальных данных

 

 

А что не помогло?

Не заработало?

А вот

 

тут скорей всего нужен небольшой хак

 

$total = $this->currency->format($this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')) * $product['quantity'],false);

$total = $this->currency->format($total,'',1, true);

 

К сожалению данный вариант, так же не работает.

При проверке = товар 380 грн и католичестве 21 шт - получилось что общая стоимость равна 7 грн.

 

 

По логике видно, что умножение стоимости товара $product['price'] на количество $product['quantity'] проводиться сразу в грн. и естественно получается отклонение.

$total = $this->currency->format($this->tax->calculate($product['price'] * $product['quantity'])); 

На сайте использую вот такую систему валют:

post-670964-0-23507000-1446799719_thumb.jpg

Share this post


Link to post
Share on other sites

А почему у вас валюта по умолчанию имеет значение 24, а не 1?

Share this post


Link to post
Share on other sites

А почему у вас валюта по умолчанию имеет значение 24, а не 1?

 

Все позиции в админке введены в $. А на сайте выводится цена в грн.

При изменении курса гривны, не приходиться пересчитывать все позиции.

Данную схему нарыл тут на форуме.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.