и тут viewtopic.php?p=1523#p1523
Давно ее решил, но хочу поделиться и с Вами.
Ситуация:
1. Создается услуга создается с ручным выполнением (Например, "Подписка на журнал Мурзилка"/каждый день)
2. Пользователь заказывает услугу, которая будет обрабатываться Администратором в ручную. Т.е. он заказывает, создает счет, оплачивает его. В итоге, заказ со статусом "На создании" лежит в разделе "Услуги". Срок заказа, предположим, 30 дней.
3. Администратор в это время отсутствует (выходные или еще что) и не может сразу обработать заказ.
4. В итоге, Администратор обрабатывает заказ через 2 дня. Но Дата окончания заказа в биллинге от этого не меняется. Т.е. не учитывается срок "простоя".
Тоже самое происходит, если услуга уже была заблокирована, по окончании срока оплаченного периода, и оплачена пользователем на следующий срок после блокировки. В этом случае, перед обработкой Администратором - заказ будет со статусом "На продлении".
Задача:
Нужно, чтобы при изменении статуса заказа на "Активен", после обработки Администратором вручную, компенсировалось время простоя.
Решение (я решил так... может кто решит иначе):
В файле hosts/billing/comp/www/API/StatusSet.comp строки 120-122
Код: Выделить всё
$StatusDate = Time();
#-------------------------------------------------------------------------
$IsUpdate = DB_Update($ModeID,Array('StatusID'=>$StatusID,'StatusDate'=>$StatusDate),Array('ID'=>$Row['ID']));
заменить на
Код: Выделить всё
#-------------------------------------------------------------------------
if ($ModeID == 'Orders'){
$ChOrders = DB_Select('OrdersOwners',Array('ID','OrderDate','ExpirationDate','StatusID','StatusDate','UserID'),Array('ID'=>$Row['ID']));
switch(ValueOf($ChOrders)){
case 'error':
return ERROR | @Trigger_Error(500);
case 'exception':
#return ERROR | @Trigger_Error(400);
break;
case 'array':
foreach($ChOrders as $ChOrder){
$chOrderDate = $ChOrder['OrderDate'];
$chExpirationDate = $ChOrder['ExpirationDate'];
$chStatus = $ChOrder['StatusID'];
$chStatusDate = $ChOrder['StatusDate'];
$chUserID = (integer)$ChOrder['UserID'];
}
break;
default:
return ERROR | @Trigger_Error(101);
}
}
#-------------------------------------------------------------------------
if($StatusID=='Active' AND $chStatus=='OnCreate' AND $ModeID == 'Orders') {
$IsUpdate = DB_Update($ModeID,Array('ExpirationDate'=>$chExpirationDate + ($StatusDate - $chOrderDate),'StatusID'=>$StatusID,'StatusDate'=>$StatusDate),Array('ID'=>$Row['ID']));
}elseif($StatusID=='Active' AND $chStatus=='OnProlong' AND $ModeID == 'Orders') {
$IsUpdate = DB_Update($ModeID,Array('ExpirationDate'=>$chExpirationDate + ($StatusDate - $chStatusDate),'StatusID'=>$StatusID,'StatusDate'=>$StatusDate),Array('ID'=>$Row['ID']));
}else{
$IsUpdate = DB_Update($ModeID,Array('StatusID'=>$StatusID,'StatusDate'=>$StatusDate),Array('ID'=>$Row['ID']));}