Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Собственно, была необходимость такая странная, что бы скидка считалась не от суммы заказа, а от цены каждой позиции. столкнулся с тем, что как то странно работал round() в mysql, а точнее из скрина ниже видно, что 47555,5 - 3% = 46128,835 и первые два под итога округляет вроде php, а последний рассчитывается запросом из базы и апдейтом пишется в total_price таблицы s_orders.

 

В итоге видим такую картину

 

 

Суть проблемы в том, что в таблицах используется тип float(10,2). Если везде для дробных значений поменять тип на decimal(10,2) - такой проблемы не будет!

 

Но я думаю это не очень хорошо, по этому данную проблему можно решить следующим способом:

- открываем api/Orders.php и находим там функцию update_total_price

- заменяем в ней запрос $query на следующий:

$query = $this->db->placehold("UPDATE __orders o SET o.total_price=IFNULL((SELECT convert(SUM(p.price*p.amount)*(100-o.discount)/100, DECIMAL(10,2)) FROM __purchases p WHERE p.order_id=o.id), 0)+o.delivery_price*(1-o.separate_delivery)-o.coupon_discount, modified=NOW() WHERE o.id=? LIMIT 1", $order->id); 

- вся суть в конвертации результат convert(result, DECIMAL(10,2))

 

 

 
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...