Снятие абонплаты по факту сессии
Снятие абонплаты по факту сессии
Возможно ли имеющимися средствами описания тарифных планов реализовать ежедневную абонплату, но чтобы она снималась только в те дни, когда были сессии? То есть если пользователь ни разу не подключался за сутки, то и абонплата не снимается.
Можно - для этого делается пакет сроком действия 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] };
> }