Снятие абонплаты по факту сессии

Ответить
ppe
Сообщения: 50
Зарегистрирован: Чт авг 09, 2007 11:35 am

Снятие абонплаты по факту сессии

Сообщение ppe »

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

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Сообщение NiTr0 »

Можно - для этого делается пакет сроком действия 1 день, ценой активации = абонплате, и добавляется код авто-активации пакета. вот результат diff-а:

Код: Выделить всё

diff -r work/abills_new/abills/Abills/mysql/Auth.pm /usr/abills/Abills/mysql/Auth.pm
24a25,26
> use Users;
> use Fees;
812a815
>   $self->{LOGIN}=$RAD->{USER_NAME};
840,842c844,868
<     $RAD_PAIRS{'Reply-Message'}="Login Not Exist or Expire";
<     return 1, \%RAD_PAIRS;
<    }
---
>     $self->query($db, "select
>       u.uid,
>       DECODE(password, '$SECRETKEY'),
>       UNIX_TIMESTAMP(),
>       UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP()), '%Y-%m-%d')),
>       DAYOFWEEK(FROM_UNIXTIME(UNIX_TIMESTAMP())),
>       DAYOFYEAR(FROM_UNIXTIME(UNIX_TIMESTAMP())),
>       u.company_id,
>       u.disable,
>       u.bill_id,
>       u.credit,
>       u.activate,
>       b.deposit,
>       u.reduction
>          FROM users u
>          LEFT JOIN bills b ON (u.bill_id = b.id)
>          WHERE
>             u.id='$RAD->{USER_NAME}'
>             AND (u.expire>'0000-00-00' and u.expire <= CURDATE())
>             AND (u.activate='0000-00-00' or u.activate <= CURDATE())
>            GROUP BY u.id;");
>     if ($self->{TOTAL} < 1 ) {
>       $RAD_PAIRS{'Reply-Message'}="Login Not Exist or Expire";
>       return 1, \%RAD_PAIRS;
>      }
844,857c870,938
<   ($self->{UID}, 
<      $self->{PASSWD}, 
<      $self->{SESSION_START}, 
<      $self->{DAY_BEGIN}, 
<      $self->{DAY_OF_WEEK}, 
<      $self->{DAY_OF_YEAR},
<      $self->{COMPANY_ID},
<      $self->{DISABLE},
<      $self->{BILL_ID},
<      $self->{CREDIT},
<      $self->{ACCOUNT_ACTIVATE},
<      $self->{REDUCTION},
<      $self->{EXT_BILL_ID}
<     ) = @{ $self->{list}->[0] };
---
>     ($self->{UID},
>        $self->{PASSWD},
>        $self->{SESSION_START},
>        $self->{DAY_BEGIN},
>        $self->{DAY_OF_WEEK},
>        $self->{DAY_OF_YEAR},
>        $self->{COMPANY_ID},
>        $self->{DISABLE},
>        $self->{BILL_ID},
>        $self->{CREDIT},
>        $self->{ACCOUNT_ACTIVATE},
>        $self->{DEPOSIT},
>        $self->{REDUCTION}
>      ) = @{ $self->{list}->[0] };
> 
>     $self->query($db, "select dv.tp_id,
>     tp.activate_price,
>     tp.age
> 
>        FROM (dv_main dv, tarif_plans tp)
>        WHERE dv.tp_id=tp.id
>            AND dv.uid='$self->{UID}'
>        GROUP BY dv.uid;");
> 
>     if ($self->{TOTAL} < 1) {
>       $RAD_PAIRS{'Reply-Message'}="No TP used during auto-change";
>       return 1, \%RAD_PAIRS;
>      }
>     ($self->{TP_ID},
>        $self->{TP_ACT_PRICE},
>        $self->{TP_AGE},
>      ) = @{ $self->{list}->[0] };
> 
>     my $admin = $CONF->{SYSTEM_ADMIN_ID};
> 
>     if($self->{TP_ACT_PRICE} > 0) {
> 
>       if ($self->{DEPOSIT} + $self->{CREDIT} < $self->{TP_ACT_PRICE}) {
>          $RAD_PAIRS{'Reply-Message'}="Not enough money for re-activate";
>          return 1, \%RAD_PAIRS;
>       }
> 
>      $self->query($db, "UPDATE bills SET deposit=deposit-$self->{TP_ACT_PRICE} WHERE id='$self->{BILL_ID}';", 'do');
>      $self->query($db, "INSERT INTO fees (uid, bill_id, date, sum, dsc, ip, last_deposit, aid, vat)
>               values ('$self->{UID}', '$self->{BILL_ID}', NOW(), '$self->{TP_ACT_PRICE}', 'RE-ACTIVATE TP',
>               '0', '$self->{DEPOSIT}', '$CONF->{SYSTEM_ADMIN_ID}',
>               '0');", 'do');
>      }
> 
>     if ($self->{TP_AGE} > 0) {
>     $self->query($db, "UPDATE users SET  activate=curdate(), expire=curdate() + INTERVAL $self->{TP_AGE} day
>       WHERE uid='$self->{UID}';", 'do');
>     }
>    }
>    else {
>     ($self->{UID},
>        $self->{PASSWD},
>        $self->{SESSION_START},
>        $self->{DAY_BEGIN},
>        $self->{DAY_OF_WEEK},
>        $self->{DAY_OF_YEAR},
>        $self->{COMPANY_ID},
>        $self->{DISABLE},
>        $self->{BILL_ID},
>        $self->{CREDIT},
>        $self->{ACCOUNT_ACTIVATE},
>        $self->{REDUCTION}
>       ) = @{ $self->{list}->[0] };
>   }

Ответить