Translations of this page:

Bonus

Пока только скрипт (в будущем модуль) для разнесения бонусов исходя из диапазона оплаченных денег:

#!/usr/bin/perl -w
use Env;
use DBI;
use Time::Local;

Параметры подключения к базе:

my $db_host = "localhost";
my $db_database = "abills";
my $db_user = "dbuser";
my $db_pass = "dbpass";
my $db_db = 0;

Открываем базу:

if (!($db_db = DBI->connect("DBI:mysql:$db_database:$db_host",$db_user,$db_pass)))
{
 die "Could not connect to database...";
}

Запрос, который выгребает сумму оплат по всем пользователям из базы за 10 месяц 2006 года, по типу оплаты 0 и 2 (Нал. и оплата по карточкам) и тарифным планам 86, 8 и 72:

my $db_query = $db_db->prepare("
 SELECT 
  dv_main.uid,
  SUM(payments.`sum`) AS Bal,
  bills.id,
  bills.deposit
 FROM
  payments
  LEFT OUTER JOIN dv_main ON (payments.uid = dv_main.uid)
  INNER JOIN bills ON (payments.uid = bills.uid)
 WHERE
  ((tp_id = 86) OR (tp_id = 8) OR (tp_id = 72)) AND 
  (payments.`date` LIKE '2006-10-%') AND 
  ((payments.method = 0) OR (payments.method = 2))
 GROUP BY
  dv_main.uid,
  bills.id,
  bills.deposit
");
$db_query->execute;
while (my @db_result = $db_query->fetchrow_array)
{
  my $bonus=0;

Если Сумма оплат находится в диапозоне от 15 до 20, то пользователь получит от этой суммы на счет 4%:

  if ($db_result[1]>=15)
   {
   if($db_result[1]<20)
    {
      $bonus=$db_result[1]*0.04;
    }
   }

Если Сумма оплат находится в диапозоне от 20 до 25, то пользователь получит от этой суммы на счет 5%:

  if ($db_result[1]>=20)
   {
    if($db_result[1]<25)
    {
      $bonus=$db_result[1]*0.05;
    }
   }

Если Сумма оплат находится в диапозоне от 25 до 30, то пользователь получит от этой суммы на счет 7%:

  if ($db_result[1]>=25)
  {
    if($db_result[1]<30)
    {
      $bonus=$db_result[1]*0.07;
    }
  }

Если Сумма оплат находится в диапозоне от 30 до 40, то пользователь получит от этой суммы на счет 10%:

  if ($db_result[1]>=30)
  {
    if($db_result[1]<40)
    {
      $bonus=$db_result[1]*0.1;
    }
  }

Если Сумма оплат находится в диапозоне от 40 до 50, то пользователь получит от этой суммы на счет 15%:

  if ($db_result[1]>=40)
   {
    if($db_result[1]<50)
    {
      $bonus=$db_result[1]*0.15;
    }
   }

Если Сумма оплат более 50, то пользователь получит от этой суммы на счет 20%:

  if ($db_result[1]>=50)
  {
      $bonus=$db_result[1]*0.20;
  }

Если пользователь попал хоть в один из диапазонов, то заносим в базу изменения:

if ($bonus!=0)
 {
 my $userid=$db_result[0];
 my $billid=$db_result[2];
 my $paysum=$bonus;
 my $desctext='Bonus 2006_10';
 my $ipadd='127.0.0.1';
 my $oldsum=$db_result[3];
 my $admid=1;
 my $metod=4;
 $db_db->do("INSERT INTO payments (uid, bill_id, date, sum, dsc, ip, last_deposit, aid, method, ext_id)
             values ('$userid', '$billid', now(), '$paysum', '$desctext', INET_ATON ('$ipadd'), '$oldsum', '$admid', '$metod', '')");
 $db_db->do("UPDATE bills SET deposit=deposit+$paysum WHERE id='$billid'");
}
}
$db_query->finish;
$db_db->disconnect;

Диапазонов может быть сколь угодно. Интеграцию в билинг я вижу примерно так:

1. Добавляем таблицу в базу, в которой будут храниться диапазоны и процент вознаграждения.
2. В меню тарифных планов необходим признак начисления бонусов.
3. В конфиге билинга список видов оплат по которым возможно начисление (либо забить в код статично).
4. Раз в месяц по крону выполнять данный скрипт.
 
abills/docs/modules/bonus/ru.txt · Последние изменения: 2009/05/16 19:51 (внешнее изменение)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki