Перейти к содержимому


Накопительные бонусы


  • Вы не можете ответить в тему
Сообщений в теме: 60

#21 Salp

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

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 19 February 2012 - 10:21 AM

Можно ведь, сделать заказ, но при этом не потратить все бонусы. Такая возможность есть. При этом будут начислены новые бонусы, но срок их действия будет невелик. Вот в чем нелогичность. Заказ сделан, цель достигнута. Бонусы начислены, но практически сразу устарели - вот это странно. Пусть при начислении и продляет сразу.

Для этого в файле order_status_functions.php

$bonus_date_begin = ($check_point_validity >= time()) ? '' : " , bonus_date_begin = '".date("Y-m-d")."' ";

заменить на:

$bonus_date_begin = " , bonus_date_begin = '".date("Y-m-d")."' ";//продление даты при каждом начислении


  • 0

#22 Alex57

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

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 14 March 2012 - 04:24 PM

Да код для валидации я нашел, только он не пашет, по крайней мере у меня (установка из архива) сравнивал файлы и вносил изменения в свои


Кстати у меня тоже не пашет, вернее пашет, но с ошибками, а именно:
Описываю все подробно.
1. Зарегился делаю первый заказ, начислены бонусы.
2. Делаю второй заказ, и вот ту начинается:
а) Невозможно оплатить бонусами до 100 рублей если доступно для оплаты бонусами (не общее количество бонусов, а именно для оплаты) больше 100 рублей, см. картинку
[ATTACH]361.vB[/ATTACH]
если ввести от 100 до 116 то, оплата произойдет нормально.
также если для оплаты доступно менее 100р. то оплатить можно любую сумму т.е. работает корректно

б) Если ввести максимально возможную сумму для оплаты, то скрипт тоже ругается, вот в этом же примере доступно максимально оплатить 117р и если я ввожу 117 р. то он опять ругается.
На мой взгляд нужно в яваскрипте увеличивать проверяемую сумму доступных для оплаты бонусов на 1, чтобы корректно можно было ввести эту самую максимальную сумму. Простой математикой типа
заменить
if  ((input_bonus > bonusC) || input_bonus < 0 ) 

на
if  ((input_bonus > bonusC + 1) || input_bonus < 0 ) 

неполучается (если я конечно верно понял что надо увеличивать :D)
Впринципе больше косяков не заметил если убрать еще проверу как тут ruter описал http://vsupport.club...2.html#post7888 которая не начисляла бонусы.

У кого какие мысли как исправить сей конфуз:D

ЗЫ В настройках у меня стоит 3% начисление и не более 9% оплаты
  • 0

#23 ruter

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

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 16 March 2012 - 10:08 PM

Кстати у меня тоже не пашет, вернее пашет, но с ошибками, а именно:
Описываю все подробно.
1. Зарегился делаю первый заказ, начислены бонусы.
2. Делаю второй заказ, и вот ту начинается:
а) Невозможно оплатить бонусами до 100 рублей если доступно для оплаты бонусами (не общее количество бонусов, а именно для оплаты) больше 100 рублей, см. картинку
если ввести от 100 до 116 то, оплата произойдет нормально.
также если для оплаты доступно менее 100р. то оплатить можно любую сумму т.е. работает корректно

б) Если ввести максимально возможную сумму для оплаты, то скрипт тоже ругается, вот в этом же примере доступно максимально оплатить 117р и если я ввожу 117 р. то он опять ругается.


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

Тут оказался конкретный случай, когда нужно приведение типов.

Вот решение:

Берем код валидации из order4_confirmation.tpl.html

{if $bonus}       

function validate_bonus(bonusC, total_bonus, bonus) {literal}{{/literal}    
    var input_bonus = document.getElementById('pay_bonus').value;
    input_bonus = input_bonus.replace(',','.');
  if  ((input_bonus > bonusC) || input_bonus < 0 )
   {literal}{{/literal}
        alert('Для оплаты доступно ' + bonus  + '  из  ' + total_bonus + ' ');
        return false;        
   {literal}}{/literal}
    document.getElementById('MainForm').submit();
    return true;
{literal}}{/literal}  
{/if}

и заменяем его на


{if $bonus}       

function validate_bonus(bonusC, total_bonus, bonus) {literal}{{/literal}    
    var input_bonus = document.getElementById('pay_bonus').value;
    input_bonus = input_bonus.replace(',','.');
    input_bonus = parseFloat(input_bonus);
  if  ((input_bonus > bonusC) || input_bonus < 0 )
   {literal}{{/literal}
        alert('Для оплаты доступно ' + bonus  + '  из  ' + total_bonus + ' ');
        return false;        
   {literal}}{/literal}
    document.getElementById('MainForm').submit();
    return true;
{literal}}{/literal}  
{/if}


Необходимо было привести переменную введеного бонуса для оплаты в число. В данном случае я выбрал плавающее число, поскольку если кто работает с разрядами, то это будет более правильнее.

Теперь все нормально работает.
  • 0

#24 Alex57

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

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 16 March 2012 - 10:48 PM

Необходимо было привести переменную введеного бонуса для оплаты в число. В данном случае я выбрал плавающее число, поскольку если кто работает с разрядами, то это будет более правильнее.

Спасибо ruter все работает )

---------- Сообщение объединено ----------

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

Хотел чтобы у меня на странице подробного описания отображалось количество начисляемых бонусов при покупке, как она отображается в кратком описании, т.е. если я в кратком описании вставлю
{$product_info.BonusAmT}
Б будет отображаться 35 Б т к есть переменная в продут функшнс -
$row["BonusAmT"] = round($row["Price"] * $bonus_percentage/ 100);

но в детальном так не получается я уже все что мог перепробывал, результата никакого, ruter помогите если сможете
  • 0

#25 ruter

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

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 16 March 2012 - 11:11 PM

Спасибо ruter все работает )

---------- Сообщение объединено ----------

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

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

{$product_info.BonusAmT}
Б будет отображаться 35 Б т к есть переменная в продут функшнс -
$row["BonusAmT"] = round($row["Price"] * $bonus_percentage/ 100);

но в детальном так не получается я уже все что мог перепробывал, результата никакого, ruter помогите если сможете


Тут немного не так. В детальном описании видно и не будет. Поскольку нет видимости переменных, которые вы хотите вставить.

1) Правим файл product_detailed.php

Сразу после кода

if ( $a["list_price"] ) $a[15] =
ceil(((($a["list_price"]-$a["Price"])/
$a["list_price"])*100)); //you save (%)

вставляем код:

//считываем текущий процент начисляемого бонуса, установленный в настройках модуля
$bon = @db_query("select bonus_percentage from ".BONUSE_PARAM_TABLE);
$row_bon = @db_fetch_row($bon);
$bonus_percentage = $row_bon['bonus_percentage'];
$a["BonusAmT"] = show_price($a["Price"] * $bonus_percentage/100, $currency_round);


Обратите внимание на обвертку функцией show_price() это проставит валюту радом с бонусом,
указание $currency_round с округлением принятым на этот тип валюты.

Теперь вставляйте в зоне видимости в любом месте шаблона product_detailed.tpl.html например, в таком виде:

Бонус за продукт: {$product_info.BonusAmT}

Слово или какое нужно Вам Бонус за продукт можете назначить константой smarty в russian.php и вывести в шаблоне.

Теперь сохраняем, сбрасываем кеш. И смотрим. Должно все отображаться правильно.

Теперь можете менять процент в настройках, валюту и округление все будет правильно отображаться.
  • 0

#26 Alex57

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

  • Assistent vsupport.club
  • PipPipPip
  • 51 сообщений
Репутация: 31
Ассистент
  • ГородОрел

Отправлено 16 March 2012 - 11:35 PM

Обратите внимание на обвертку функцией show_price() это проставит валюту радом с бонусом,
указание $currency_round с округлением принятым на этот тип валюты.

Кому может пригодится без рублей чтобы (у меня так)
$a["BonusAmT"] = round($a["Price"] * $bonus_percentage/100);

  • 0

#27 freemind

    Пользователь

  • Download User
  • PipPip
  • 12 сообщений
Репутация: 3
Начинающий

Отправлено 25 May 2012 - 04:31 PM

Жаль, что модуль предусматривает только один критерий расчета бонусов независимо от суммы заказа. Было бы неплохо добавить несколько вариантов расчета, например, от 1000 руб. - 3%, от 2500 руб. - 5% и т.д. Это так)))) к теме...
  • 1

#28 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 25 May 2012 - 05:13 PM

неправда, вообще-то он так и работает как Вы описали.
  • 0

#29 freemind

    Пользователь

  • Download User
  • PipPip
  • 12 сообщений
Репутация: 3
Начинающий

Отправлено 27 May 2012 - 10:33 PM

неправда, вообще-то он так и работает как Вы описали.


Ну как же? У меня при установке получилось, что вариант расчета можно задать только единожды и все (скрин ниже). А было бы удобнее иметь несколько вариантов, аналогичной системе скидок, и параметры задавать не в %, а в денежном эквиваленте. Например, 2% бонуса - стоимость заказа от 1500 руб., 5% бонуса - стоимость заказа от 2500 руб. и т.д. Такой расчет более гибок и повторюсь удобен. Так к примеру система бонусов работает на ozon.ru (это не реклама)

Изображение
  • 1

#30 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 28 May 2012 - 07:03 AM

Ну как же? У меня при установке получилось, что вариант расчета можно задать только единожды и все (скрин ниже).


Да я не прав, перепутал с накопительной скидкой. Это там можно добавлять сколько угодно процентов при накоплении разных сумм.
  • 0

#31 freemind

    Пользователь

  • Download User
  • PipPip
  • 12 сообщений
Репутация: 3
Начинающий

Отправлено 28 May 2012 - 11:03 AM

А как отключать систему бонусов?
  • 1

#32 ruter

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

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 09 June 2012 - 04:13 PM

Отключение и выключение не предусматривалось. Эта система не игрушка для локального компьютера. Лочично выключать и включать системы скидок. А эту систему ё можно проверить на локальном и решить ставить или нет. А на рабочем сайте когда задействованы интересы сотней и тысяч покупателей (начислены бонусы) то простое отключение просто не логично. Что вы будете делать с бонусами покупателей? Нужно просто решить нужна система или нет. И ставить тогда, когда решили поставить.
  • 0

#33 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 August 2013 - 02:49 PM

Интересно, это я читая тему уже раза два как-то умудрился упустить или никто не замечал в модуле строку

$row["PriceWithBonus"] = ($PriceWithBonus1 <= $bonus) ? show_price($row["Price"] - ($row["Price"] * $amount_percentage/ 100)) : show_price($row["Price"] - $bonus);


где используется переменная $PriceWithBonus1, нигде больше не встречающаяся? Т.е. если товар 100руб, бонусами не больше 20%, а у клиента 10 бонусов, то выведется не 90руб, а 80руб.

PS. исправление:

$row["PriceWithBonus"] = show_price($row["Price"] - min($row["Price"] * $amount_percentage/ 100,$bonus));

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#34 Salp

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

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 16 August 2013 - 02:29 PM

О формочке редактирования бонусов я думал. Но поджимало время тогда это сделать. Это не сложно.

Сделал это таким образом
Прикрепленный файл  bonus.png   25.49К   71 Количество загрузок:
  • 1

#35 ruter

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

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 20 August 2013 - 08:41 AM

О формочке редактирования бонусов я думал. Но поджимало время тогда это сделать. Это не сложно.

Сделал это таким образом
Прикрепленный файл  bonus.png   25.49К   71 Количество загрузок:


Формочку уже в январе сделал, все никак руки не доходят обновить. Думаю на днях сделаю.
  • 0

#36 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 01 September 2013 - 08:02 PM

Формочку уже в январе сделал, все никак руки не доходят обновить. Думаю на днях сделаю

Не дождавшись "на днях" сделал свою по причине спонсорства :).
Выглядит примитивнейше, но задачу выполняет.
Прикрепленный файл  1.JPG   26.3К   45 Количество загрузок:

Установка:
=========
1. в файле custord_custlist.tpl.html

после строки


<table class="adn" width="50%"><tr class="liney"><td align="left" width="10%">Всего было начислено бонусов: <b style="color:green">{$bonus_sum}</b></td><td align="left" width="15%">Бонусы просрочены. Дата окончания бонусов была: <b style="color:green">{$date_check_point_adm}</b></td><td align="left" width="10%">Установленный срок действия бонусов: <b style="color:green">{$count_days_validity_adm}</b> дней.</td></tr></table>{else}<table class="adn" width="50%"><tr class="liney"><td align="left" width="10%">Бонусы пока еще не начислялись. Заказы не делались или не были завершены.</td></tr></table>{/if}


вставляем


{* BEGIN Admin-add-bonus *}
<table class="adn">
<tr class="liney">
<td>
<form name="bonus_update" id="bonus_update" action="{$smarty.const.ADMIN_FILE}?dpt=custord&sub=custlist&customer_details=bonus_system&customerID={$customerID}&encodedReturnUrl={$encodedReturnUrl}" method="POST">
<input type="text" name="bonus_add_sum" size="10">
<label><input type="checkbox" name="bonus_add_time" value="1" checked>Продлить</label>
<a href="#" onclick="if (window.confirm('Вы уверены, что хотите добавить бонусы?')) document.getElementById('bonus_update').submit();" class="inl">&nbsp;&nbsp;Добавить бонусы</a>
</form>
</td>
</tr>
</table>
{* END Admin-add-bonus *}



2. в файле custord_custlist.php

после строки

if ( $_GET['customer_details'] == 'bonus_system'){


вставляем


# BEGIN Admin-add-bonus
if (isset($_POST['bonus_add_sum'])) db_query("UPDATE ".CUSTOMERS_TABLE." SET total_amount=total_amount+".(float)$_POST['bonus_add_sum'].(isset($_POST['bonus_add_time'])?",bonus_date_begin ='".date("Y-m-d")."'":"")." WHERE customerID=".$_GET["customerID"]);
# END Admin-add-bonus


PS. нажимаем "Добавить бонусы" с пустым полем бонусов и установленной галочкой "продлить" - получаем продление без изменения количества бонусов.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#37 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 04 September 2013 - 12:42 PM

Нашел еще ошибочку. Если бонусов при оплате выбрать больше 999 (например, 1234), то из суммы покупки вычтется не 1234 рубля, а только 1.
Происходит это потому, что в функции ordOrderProcessing величина 1234
- сначала округляется функцией roundf до двух знаков после запятой
- затем форматируется функцией _formatPrice в строку 1 234.00 (с пробелом между триадами)
- затем обрабатывается функцией round, где при неявном преобразовании типов (строка в число) превращается в единицу
В чем фишка предварительного округления до двух знаков, затем форматирования и снова округления уже с заданной для основной валюты точностью я не понял и просто убрал первое округление и форматирование.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#38 shkap

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 28 сообщений
Репутация: 6
Начинающий

Отправлено 17 October 2013 - 01:22 PM

Помогите, не знаю в чем проблема. При установке модуля, а именно при добавлении изменений в файл russian.php, магазин перестаёт работать. После удаления из этого файла строчек define('ADMIN_BONUS_SYSTEM', 'Система бонусов');
define('ADMIN_BONUS_SYSTEM2', 'Бонусы'); всё начинает работать. Кто сталкивался, может это из-за версии 3.1.1
  • 1

#39 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 17 October 2013 - 01:28 PM

Подозреваю что Вы кудато не туда добавляете.
  • 0

#40 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 October 2013 - 02:12 PM

При установке модуля, а именно при добавлении изменений в файл russian.php, магазин перестаёт работать.

В 3.1.2 последняя строка в russian.php не имеет знака ";" в конце строки, т.к. она последняя и этот знак не обязателен.
Думаю, что в 3.1.1 ровно то же самое и если вы делаете вставку define ... последней строкой, то надо "бывшую последнюю" закрыть знаком ";".
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)