Форум русской поддержки Joomla!® CMS
04.12.2016, 20:16:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Скидка в способе оплаты

 (Прочитано 403 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« : 09.12.2015, 22:36:54 »

Здравствуйте
При добавлении способа оплаты можно сделать процентную (относительную) скидку.
При выборе покупателем этого способа оплаты - будет начисляться скидка в процентах от суммы товара.
Пожалуйста, подскажите, в каком файле и где именно рассчитывается эта скидка в процентах?
Записан
CaHeK_pk
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 119


« Ответ #1 : 11.12.2015, 01:43:40 »

Такого в стандартных функциях я не встречал, искать плагины только...
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #2 : 11.12.2015, 12:04:01 »

Такого в стандартных функциях я не встречал, искать плагины только...
CaHeK_pk, все есть в стандартных функциях: Компоненты-Virtuemart-Способы оплаты
создаем новый способ оплаты
вот скрин:

ну и сам вопрос - в каком файле и где именно рассчитывается эта скидка в процентах?
Записан
CaHeK_pk
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 119


« Ответ #3 : 11.12.2015, 16:06:03 »

CaHeK_pk, все есть в стандартных функциях: Компоненты-Virtuemart-Способы оплаты
неправильно вас понял, думал идет речь о накопительной скидке покупателя.
не знаю как в VirtueMart 1. на втором идут расчеты с плагинов VirtueMart. "plugins\vmpayment\"
либо \administrator\components\com_virtuemart\plugins\vmpsplugin.php
что именно вам нужно?
---
Кстати, на сколько помню, в скидке нужно указывать положительные значения. т.е не "-10.00" а "10.00"
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #4 : 11.12.2015, 16:42:45 »

что именно вам нужно?
CaHeK_pk, хочу сделать так, чтобы скидка начислялась от общей суммы заказа (включая стоимость доставки)
Кстати, на сколько помню, в скидке нужно указывать положительные значения. т.е не "-10.00" а "10.00"
положительное значение - это скидка
отрицательное значение - это доплата (у меня в одном из способов оплаты - доплата 10 процентов)
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2236


« Ответ #5 : 11.12.2015, 20:25:22 »

в каком файле и где именно рассчитывается эта скидка в процентах?
\administrator\components\com_virtuemart\classes\ps_checkout.php
function get_payment_discount()

Если надо изменить этот момент в отдельных способах оплаты, то их класс должен содержать "кастомную" функцию расчета скидки - get_payment_rate(). В дефолтных оплатах нашел только одно вхождение - в оплате "ps_cashondel.php". Если такой функции в вашем классе оплаты нет, используется функционал расчета скидки  от "субтотал":
Код:
$value = (float) ($discount/100) * $subtotal;

У вас на скрине ps_payment. Это класс-заглушка с пустыми функциями. Если будете писать get_payment_rate(), не трогайте его. Клонируйте, переобзовите и используйте клон.
Если требуемое изменение надо во всех оплатах, можно и базовый класс хакнуть. Только не забыть, что и где меняли.
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #6 : 11.12.2015, 23:48:46 »

fsv, сделал так:
\administrator\components\com_virtuemart\classes\ps_checkout.php
в функции get_payment_discount
Код
$shipping_total = $db->f('shipping_total');
$zzz = $shipping_total + $subtotal;
$value = (float) ($discount/100) * $zzz;
 
ничего не получилось, наверное, неправильно сделал запрос:
Код
$shipping_total = $db->f('shipping_total');
 
Поможете?
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2236


« Ответ #7 : 12.12.2015, 15:24:06 »

Если у вас выбор оплат на следующей странице после выбора доставок, попробуйте получить стоимость доставки из
Код
global $vars;
$ship_arr = explode("|", $vars["shipping_rate_id"]);
echo "<pre>".print_r($ship_arr, true)."</pre>";
Если на одной странице, сложнее, вряд ли даже с подсказками справитесь.

Предполагаю, вы вообще не с того конца подходите к решению вопроса. Опишите подробно. Тему читал. Там не раскрыто. Складывается впечатление, что вы хотите привести отображение на сайте к нужной картинке, бессистемно внося правки в разных местах. После получения картинки не факт, что получите функционал.
« Последнее редактирование: 13.12.2015, 00:50:01 от fsv » Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #8 : 12.12.2015, 19:51:41 »

Если у вас выбор оплат на следующей странице после выбора доставок, попробуйте получить стоимость доставки из
Код
global $vars;
$ship_arr = explode("|", $var["shipping_rate_id"]);
echo "<pre>".print_r($ship_arr, true)."</pre>";

fsv, не получилось
на последнем шаге оформления заказа:
Код
Array
(
   [0] =>
)
 

добавил
Код
global $vars;
$ship_arr = explode("|", $var["shipping_rate_id"]);
$ship_arr = $ship_arr[0];
echo  $ship_arr;
 
ехо ничего не выводит
« Последнее редактирование: 12.12.2015, 20:38:04 от sashgera » Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2236


« Ответ #9 : 13.12.2015, 00:49:35 »

$vars
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #10 : 13.12.2015, 11:51:36 »

$vars
fsv, теперь в ехо хеш:
standard_shipping%7C%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0+%D0%B2+%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D1%8B%7C%2A%D0%B4%D0%BE+%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85+%D0%A2%D0%9A%7C1000.00%7C4
если декодировать, то:
standard_shipping|Отправка+в+регионы|*до+других+ТК|1000.00|4
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2236


« Ответ #11 : 13.12.2015, 16:01:18 »

Так вопрос в чем? Выше же показал, как разобрать эту строку в массив. Четвертый элемент массива - стоимость доставки.
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #12 : 13.12.2015, 20:17:44 »

fsv, да, я вижу, что четвертый элемент массива [3] - стоимость доставки, но все равно не получается
вот полностью изменения в файле ps_checkout.php

строку:
Код
$value = (float) ($discount/100) * $subtotal;
 
заменил на:
Код
global $vars;
$ship_arr = explode("|", $vars["shipping_rate_id"]);
$shippingtotal = $ship_arr[3]; // [3] элемент массива - стоимость доставки
 
$doplata = $shippingtotal + $subtotal;
$value = (float) ($discount/100) * $doplata;
 
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2236


« Ответ #13 : 13.12.2015, 21:25:14 »

Причин сколько угодно. Такие изменения надо не заочно мне придумывать, а вам самому на сайте смотреть. Направление дано, далее "спасение утопающих...".
1) Что в логах?
2) Если привести к числу (int/float):    $shippingtotal = (int)$ship_arr[3];
3) функция get_payment_discount() вообще $vars["shipping_rate_id"] ловит?
Проверить:  в конце
Код:
return $value;
заменить на
Код:
global $vars;
return $vars["shipping_rate_id"];
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #14 : 14.12.2015, 07:04:18 »

fsv, сделал немного по-другому:
administrator/components/com_virtuemart/classes/ps_checkout.php
Код
$shipping_rate_id = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id'])); 
$shippingtotal = $shipping_rate_id[count($shipping_rate_id)-2];
$newsubtotal = $subtotal + $shippingtotal;
$value = (float) ($discount/100) * $newsubtotal;
 


Теперь осталось сделать изменения в лейбле способа оплаты.
В лейбле сделал, как мог,  работает криво. Сейчас в админке относительный тип доплаты и расчет ведется правильно. Но если, например, изменить на абсолютный тип – расчет будет неправильный.
administrator/components/com_virtuemart/classes/ps_payment_method.php
после строки
Код
$discount  = $ps_checkout->get_payment_discount( $db->f("payment_method_id") );
 
добавил
Код
$shipping_rate_id = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id'])); 
$shippingtotal = $shipping_rate_id[count($shipping_rate_id)-2];
$payment_SkidkaDoplata = $GLOBALS['CURRENCY_DISPLAY']->getFullValue( $db->f("payment_method_discount") );
$label_SkidkaDoplata = ($shippingtotal / 100) * $payment_SkidkaDoplata - $discount;
 
и заменил переменную в
Код
echo " (+ ".$CURRENCY_DISPLAY->getFullValue(abs($label_SkidkaDoplata)).") \n";
 
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet