1. Пользователь заказывает или продляет услугу, нажимает "Новый заказ" или "Оплатить заказ", выбирает период оплаты, нажимает "Продолжить" и еще раз "Продолжить", Заказ попадает в корзину. Но пользователь решил изменить период оплаты до выписки счета.
Так вот:
При заказе/продлении услуги, если изменять период оплаты из корзины, то ошибка 500
жалуется, что
Код: Выделить всё
SELECT `ID`,`UserID`,`ServiceID`,`ExpirationDate`,`IsPayed`,`StatusID`,(SELECT `Balance` FROM `Contracts` WHERE `Contracts`.`ID` = `ContractID`) as `ContractBalance` FROM `OrdersOwners`
запись не является уникальной в линии 195 файла /path/to/billing/hosts/root/system/libs/auto/DB.lib
Если заного оплатить заказ с помещением его в корзину, то период изменяется, заменив старый пункт в корзине на новый с новыми данными.
Поковырял, нашел, что за это отвечает в файле hosts/billing/comp/www/ServiceOrderPay.comp строка 23
Код: Выделить всё
$ServiceOrder = DB_Select('OrdersOwners',$Columns,Array('UNIQ','ID'=>$ServiceOrderID?$ServiceOrderID:$OrderID));
При этом везде в файле используется именно $ServiceOrderID... а $OrderID передается через GET только при попытке изменить период оплаты из корзины.
Поэтому, решил эти значения приравнять при условии, что $OrderID есть.
Решается:
В файле hosts/billing/comp/www/ServiceOrderPay.comp строку 23 сделать вида:
Код: Выделить всё
$ServiceOrder = DB_Select('OrdersOwners',$Columns,Array('UNIQ','ID'=>$ServiceOrderID=$OrderID?$OrderID:$ServiceOrderID));
или, чтобы было более понятно:
В файле hosts/billing/comp/www/ServiceOrderPay.comp перед строкой 23 добавить
Код: Выделить всё
if($OrderID) $ServiceOrderID=$OrderID;