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

Бонусная система (нашёл модуль в просторах)


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

Добрые други. Нашёл я модуль "БОНУСЫ ДЛЯ SIMPLA" в просторах интернета. Но как я понял, он не совсем рабочий.

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

Для начала опишу как его поставить.


1) Начнем, делаем 3 SQL-запроса

INSERT INTO `s_settings` (`setting_id`, `name`, `value`) VALUES (NULL, 'bonus_order', ''), (NULL, 'bonus_limit', '');
ALTER TABLE  `s_users` ADD  `balance` FLOAT( 8, 2 ) NOT NULL AFTER  `name`;
ALTER TABLE  `s_orders` ADD  `bonus_discount` FLOAT( 10, 2 ) NOT NULL AFTER  `discount`;

 

 

2) Открываем файл api/Users.php, ищем (примерно 95 строка)
 

$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u LEFT JOIN __groups g ON u.group_id=g.id $where LIMIT 1", $id);

и меняем на

$query = $this->db->placehold("SELECT u.id, u.email, u.password, u.name, u.balance, u.group_id, u.enabled, u.last_ip, u.created, g.discount, g.name as group_name FROM __users u LEFT JOIN __groups g ON u.group_id=g.id $where LIMIT 1", $id);


3) Открываем файл simpla/UserAdmin.php и после (14 строка)

$user->email = $this->request->post('email');

 

Добавляем

$user->balance = $this->request->post('balance', 'float');

 

 

4) Открываем файл simpla/design/html/user.tpl и после (68 строка)

<li><label class=property>Email</label><input name="email" class="simpla_inp" type="text" value="{$user->email|escape}" /></li>

Добавляем

<li><label class=property>Начислено бонусов</label><input name="balance" class="simpla_inp" type="text" value="{$user->balance|escape}" /> {$currency->sign}</li>

 

5) Открываем файл simpla/SettingsAdmin.php и после (29 строка)

$this->settings->thousands_separator = $this->request->post('thousands_separator');

Добавляем

$this->settings->bonus_order = $this->request->post('bonus_order');
$this->settings->bonus_limit = $this->request->post('bonus_limit');

 

6) Открываем файл simpla/design/html/settings.tpl и перед (80 строка)

<!-- Параметры -->
                <div class="block layer">
                        <h2>Настройки каталога</h2>

 

Добавляем

<div class="block layer">
      <h2>Бонусы</h2>
      <ul>
        <li><label class=property>Начисление от заказа</label><input name="bonus_order" class="simpla_inp" type="text" value="{$settings->bonus_order|escape}" /> %</li>
        <li><label class=property>Лимит бонусов при заказе</label><input name="bonus_limit" class="simpla_inp" type="text" value="{$settings->bonus_limit|escape}" /> %</li>
      </ul>
    </div>

 

7) Открываем файл api/Orders.php заменим в двух местах в запросе (строки 25 и 81)

o.discount

Заменим на

o.discount, o.bonus_discount

 

8) Далее в этом же файле заменим (500 строка)

$query = $this->db->placehold("UPDATE __orders o SET o.total_price=IFNULL((SELECT SUM(p.price*p.amount)*(100-o.discount)/100 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);

На

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

 

9) Далее перед (451 строка)

}
return $order->id;

Перед ней добавим
 

if($order->user_id) {
   $user = $this->users->get_user(intval($order->user_id));
f(!empty($user))
          $this->users->update_user($user->id, array('balance' => ($user->balance + $order->total_price * $this->settings->bonus_order / 100)));
      }

 

10) Далее перед (482 строка)

}
return $order->id;

Перед ней добавим

if($order->user_id) {
        $user = $this->users->get_user(intval($order->user_id));
        if(!empty($user))
          $this->users->update_user($user->id, array('balance' => max(0, $user->balance - $order->total_price * $this->settings->bonus_order / 100)));
      }

 

11) Открываем файл simpla/design/html/order.tpl и перед (308 строка)

<div class="block discount layer">
                <h2>Скидка</h2>

Добавим

<div class="block discount layer">
<h2>Бонусы</h2>
<input type=text name=bonus_discount value='{$order->bonus_discount}' disabled> <span class=currency>{$currency->sign}</span>    
</div>
<div class="subtotal layer">
С учетом бонусов<b> {($subtotal-$order->bonus_discount)|round:2} {$currency->sign}</b>
</div>

 

12) Открываем файл view/CartView.php и после (47 строка)

$order->name = $this->request->post('name');

Добавим

$bonus  = $this->request->post('bonus','integer');

 

13) Далее после (строка 56)

$this->design->assign('name', $order->name);

Добавим

$this->design->assign('bonus', $bonus);

 

14) Открываем файл design/default/html/cart.tpl и перед (72 строка)

{if $coupon_request}

Добавим

{if $settings->bonus_limit && $user->balance}
<tr>
        <th class="image"></th>
        <th class="name"><label><input type="checkbox" name="bonus" value="1"{if $bonus} checked{/if} /> оплатить бонусами (доступно {$user->balance|convert} {$currency->sign})</label></th>
        <th class="price"></th>
        <th class="amount"></th>
        <th class="price">
    {if ($cart->total_price * $settings->bonus_limit / 100) >= $user->balance}
                {$user->balance|convert} {$currency->sign}
    {else}
    −{($cart->total_price * $settings->bonus_limit / 100)|convert} {$currency->sign}
    {/if}
        </th>
        <th class="remove"></th>
</tr>
{/if}

 

15) Открываем design/default/html/order.tpl и перед (61 строка)

{* Скидка, если есть *}
{if $order->discount > 0}

Добавим

{* Скидка, если есть *}
{if $order->bonus_discount > 0}
<tr>
  <th class="image"></th>
  <th class="name">бонусы</th>
  <th class="price"></th>
  <th class="amount"></th>
  <th class="price">
    −{$order->bonus_discount|convert} {$currency->sign}
  </th>
</tr>
{/if}

 

 

 

Так вот автор обещает работоспособность этого модуля. Но что-то как-то не очень он хочет работать. Поэтому прошу вас помочь мне разобраться с ним. У меня версия 2.3.6 и после выполнения 9 и 10 шага, сайт падает в ошибку 500. Есть подозрения, что скрипт написан для более поздней версии. А за недостатком знаний исправить сам не могу.

 

 

ИСТОЧНИК МОДУЛЯ

Изменено пользователем Chudo
Ссылка на сообщение
Поделиться на другие сайты

В п. 9  сразу видна ошибка - одна буква потерялась - должно быть if(!empty($user)) 

 

А вообще, если выкладываете чужой код, надо бы и источник упоминать.

Похоже, взято отсюда:

http://templazilla.ru/moduli-i-dopolnenija-simpla-cms/2016/05/17/bonusnaya-sistema.html

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

В п. 9  сразу видна ошибка - одна буква потерялась - должно быть if(!empty($user)) 

 

А вообще, если выкладываете чужой код, надо бы и источник упоминать.

Похоже, взято отсюда:

http://templazilla.ru/moduli-i-dopolnenija-simpla-cms/2016/05/17/bonusnaya-sistema.html

 

Ссылку указал. Спасибо опять тебе)))) 

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

В п. 9  сразу видна ошибка - одна буква потерялась - должно быть if(!empty($user)) 

 

А вообще, если выкладываете чужой код, надо бы и источник упоминать.

Похоже, взято отсюда:

http://templazilla.ru/moduli-i-dopolnenija-simpla-cms/2016/05/17/bonusnaya-sistema.html

 

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

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

Причин может быть много.

А в той разработке, видимо, ошибок еще предостаточно.

Например, в коде не видно, где происходит уменьшение баланса при оплате бонусами - скорее всего, нигде...

И смотрите в источнике комментарии - поддержки там никакой, зато автор прицепил форму для отправки ему денег за хорошую работу.

 

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

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

П зато автор прицепил форму для отправки ему денег за хорошую работу.

 

И на странице вредный анти-Adblock стоит ))

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • 3 недели спустя...
  • 6 месяцев спустя...

Все привет, тоже интересует данное дополнение, бесплатное не работает, сегодня купил думал будет работать но увы оказалось таким же не рабочим, хорошо хоть за 5$ всего купил ))) Может кто подскажет где купить рабочее ?

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

Все привет, тоже интересует данное дополнение, бесплатное не работает, сегодня купил думал будет работать но увы оказалось таким же не рабочим, хорошо хоть за 5$ всего купил ))) Может кто подскажет где купить рабочее ?

 

у меня есть такое http://forum.simplacms.ru/topic/11400-2-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D1%81%D1%87%D0%B5%D1%82-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F/

 

настрою под вас если что. пишите в личку

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

Ну что господа программисты сможет кто нибудь допилить данный код , или он безнадёжен?

у меня есть такое http://forum.simplacms.ru/topic/11400-2-виртуальный-счет-пользователя/

 

настрою под вас если что. пишите в личку

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

Тут программистов сделать такой модуль хватает но никто его вам не сделает за те же 5$, лично я бы взял от 40$ в зависимости от ТЗ.

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

Вы или не видите или ищите очередное решение за копейки, я вам уже {url=http://forum.simplacms.ru/topic/7099-2х-мультифильтр-с-диапазоном/page-3#entry98496]писал ранее[/url по поводу покупки на разных сайтах барыг, но вам видать никак не доходит суть.

Тут программистов сделать такой модуль хватает но никто его вам не сделает за те же 5$, лично я бы взял от 40$ в зависимости от ТЗ.

Я ведь не заставляю вас делать, но кроме вас ведь ещё есть люди, может кто и возьмётся. В конце концов не только ведь деньги в жизни существуют. О каком ТЗ идёт речь ? Всё ТЗ вверху написано. То что уже есть надо доделать , никаких ТЗ никто не предлагает и никто ничего не заказывает, может кто то ради спортивного интереса займётся этим вопросом. Вы так переживаете как будто я у вас из кармана деньги вытаскиваю или заставляю вас что то делать. 

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

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

Удачи!

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

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

Удачи!

С Мишаней мы уже пообщались, у меня складывается впечатление , что вы тут работаете. На форуме есть такой раздел Платные модули и услуги , я по моему нахожусь в другом разделе , а вы вроде как оттуда. Ну ладно давайте закончим это бессмысленное общение. Удачи вам и всех благ.

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

Если кому интересно расскажу чем закончилась история с данным модулем. Оказалось , что модуль который я купил он рабочий, только инструкция не дописана, а я пытался делать по инструкции. Инструкция это текст который тут написан, но если тупо копировать файлы из архива на свой сайт то всё чудесно работает, так что приношу публичные извинения людям продавшим мне этот модуль. Я бы с удовольствием поделился модулем но к сожалению это противоречит правилам. Всем спасибо и удачи. Так что можно тут покупать. Из пяти купленных все пять работают без проблем.

Изменено пользователем Gruzin
Ссылка на сообщение
Поделиться на другие сайты

Что бы всё заработало нужно в файле view/cartview.php строка 90 дописать следующий код:

 

После строк 90
else
        {
Добавляем
if($bonus && $this->settings->bonus_limit && $this->user->balance) {
    if(($cart->total_price * $this->settings->bonus_limit / 100) > floatval($this->user->balance))
      $order->bonus_discount = floatval($this->user->balance);
    else
      $order->bonus_discount = ($cart->total_price * $this->settings->bonus_limit / 100);
 
    $this->user->balance = $this->user->balance - $order->bonus_discount;
    $this->users->update_user($this->user->id, array('balance' => $this->user->balance));
  }
 
Изменено пользователем Gruzin
Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

только минус что бонусы начисляются сразу после того как списывается товар и даже получается если статус "Принят" то бонус уже начислялся. Подскажите как сделать чтобы начислялись только при статусе "Выполнен" ?

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

только минус что бонусы начисляются сразу после того как списывается товар и даже получается если статус "Принят" то бонус уже начислялся. Подскажите как сделать чтобы начислялись только при статусе "Выполнен" ?

 

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

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

в ф-и close() из api/Orders.php 

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

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

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

в ф-и close() из api/Orders.php 

Не совсем наверное понял, в файле CartView код выполняется только на сайте, а статус заказа мы меняем в админке и взаимосвязи не понял. По идее нужно редактировать api/Orders.php

 

И я так понимаю не должно все таки при оформлении заказа начисляться бонусы, потому что они начисляются в api/Orders.php в функции - public function close($order_id)

 

таким кодом:

 

if($order->user_id) {
            $user = $this->users->get_user(intval($order->user_id));
            if(!empty($user))
            $this->users->update_user($user->id, array('balance' => ($user->balance + $order->total_price * $this->settings->bonus_order / 100)));
            }
Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

Не совсем наверное понял, в файле CartView код выполняется только на сайте, а статус заказа мы меняем в админке и взаимосвязи не понял. По идее нужно редактировать api/Orders.php

 

да, я перепутал с списанием при новом заказе. нужно п9 и п10 править, они в правильном месте, но нужно еще проверять статус заказа там. + нет проверки если менеджер изменил пару раз статус заказа - бонусы начислятся столько же раз, если назад в новый перекинуть заказ и обратно

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

да, я перепутал с списанием при новом заказе. нужно п9 и п10 править, они в правильном месте, но нужно еще проверять статус заказа там. + нет проверки если менеджер изменил пару раз статус заказа - бонусы начислятся столько же раз, если назад в новый перекинуть заказ и обратно

 

Я пробовал сделать вот так, но не работает

 

if($order->user_id) {
            $user = $this->users->get_user(intval($order->user_id));
            if(!empty($user))
            if ($order->status_id == 3)
            $this->users->update_user($user->id, array('balance' => ($user->balance + $order->total_price * $this->settings->bonus_order / 100)));
            }

тогда вообще ни при каком статусе не начисляются бонусы, я так понимаю это связано с тем что функция close выполняется только при списании товара, а перед статусом Выполнен он списывается еще в статусе Принят

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

 

Я пробовал сделать вот так, но не работает

 

if($order->user_id) {
            $user = $this->users->get_user(intval($order->user_id));
            if(!empty($user))
            if ($order->status_id == 3)
            $this->users->update_user($user->id, array('balance' => ($user->balance + $order->total_price * $this->settings->bonus_order / 100)));
            }

тогда вообще ни при каком статусе не начисляются бонусы, я так понимаю это связано с тем что функция close выполняется только при списании товара, а перед статусом Выполнен он списывается еще в статусе Принят

 

нет, просто нужно в эту ф-ю передавать еще и новый статус заказа, он изменяется после вызова ф-и. тоесть вот ту if ($order->status_id еще старый статус

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

нет, просто нужно в эту ф-ю передавать еще и новый статус заказа, он изменяется после вызова ф-и. тоесть вот ту if ($order->status_id еще старый статус

 

Может сделать вот так?

            $order = $this->get_order(intval($order_id));
            
            if($order->user_id) {
            $user = $this->users->get_user(intval($order->user_id));
            if(!empty($user))
            if ($order->status_id == 3)
            $this->users->update_user($user->id, array('balance' => ($user->balance + $order->total_price * $this->settings->bonus_order / 100)));
            }
 

 

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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