Пример #1
0
 public function process_event(&$event)
 {
     global $DB;
     $this->force_connect();
     $is_repeat = false;
     $message = false;
     $reserve_id = intval(@$event->data['reserve_id']);
     try {
         switch ($event->type) {
             case 'payback':
                 $is_repeat = !ReservesPayback::getInstance()->doPayback($reserve_id);
                 if (!$is_repeat) {
                     $message = 'Средства возвращены.';
                 }
                 break;
             case 'payout':
                 $is_repeat = !ReservesPayout::getInstance()->doPayout($reserve_id);
                 if (!$is_repeat) {
                     $message = 'Средства выплачены.';
                 }
                 break;
         }
     } catch (ReservesPayException $e) {
         $message = 'Ошибка: ' . $e->getMessage();
         $is_repeat = $e->isRepeat();
     }
     if ($message) {
         $this->log->notice(iconv('CP1251', 'UTF-8', sprintf(self::LOG_FORMAT, $event->type, $reserve_id, $message)));
     }
     if ($is_repeat) {
         $DB->query("SELECT pgq.insert_event('reserves', ?, ?)", $event->type, http_build_query($event->data));
     }
     return PGQ_EVENT_OK;
 }
Пример #2
0
/**
 * Выплата по резерву
 * 
 * @todo: пока только приспособлено только для заказа
 * но возможна доработка при работе резерва с любым другим объектом
 * 
 * @param type $type - тип способа выплаты
 * @param type $params - данные
 * @return \xajaxResponse
 */
function reservesPayoutProcess($type, $params)
{
    $objResponse =& new xajaxResponse();
    $orderModel = TServiceOrderModel::model();
    $uid = get_uid(false);
    $order_id = intval(@$params['oid']);
    $hash = @$params['hash'];
    $test_hash = md5(TServiceOrderModel::SOLT . $order_id);
    $error = false;
    try {
        if ($uid <= 0 || $hash !== $test_hash || !in_array($type, ReservesPayoutPopup::$payment_list)) {
            throw new Exception();
        }
        $orderData = $orderModel->getCard($order_id, $uid);
        if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) {
            throw new Exception();
        }
        $reserveInstance = $orderModel->getReserve();
        if (!$reserveInstance->isAllowPayout($uid) || !$reserveInstance->isFrlAllowFinance()) {
            throw new Exception();
        }
        $history = new tservices_order_history($order_id);
        $reservesPayout = new ReservesPayout();
        $status = $reservesPayout->requestPayout($reserveInstance, $type);
        $is_done = $reserveInstance->changePayStatus($status);
        if ($is_done) {
            //@todo: передача данных устаревший способ но оставляем для поддержки пока
            //посностью не передем на обьекты
            $orderData['reserve_data'] = $reserveInstance->getReserveData();
            //@todo: правильный способ - нужно оперировать обьектами
            $orderData['reserve'] = $reserveInstance;
            try {
                $doc = new DocGenReserves($orderData);
                $doc->generateInformLetterFRL();
            } catch (Exception $e) {
                require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/log.php';
                $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log', 'a', "%d.%m.%Y %H:%M:%S: ");
                $log->writeln(sprintf("Order Id = %s: %s", $orderData['id'], iconv('CP1251', 'UTF-8', $e->getMessage())));
                //$sHtml = tservices_helper::getMessage($e->getMessage(),'error');
                //$objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml);
            }
        }
        $feedback = @$params['feedback'];
        $is_feedback = !empty($feedback);
        $fbtype = @$params['fbtype'];
        //Сохраняем отзыв если он есть
        if ($is_feedback && !$orderModel->isFrlFeedback()) {
            $is_emp = false;
            $orderFeedbackModel = new TServiceOrderFeedbackModel();
            $is_valid = $orderFeedbackModel->attributes(array('feedback' => $feedback, 'rating' => $fbtype, 'is_emp' => $is_emp, 'user_id' => $uid));
            //Тут обрабатывать ошибки при валидации
            if (!$is_valid || !$orderFeedbackModel->addFeedback($order_id)) {
                return $objResponse;
            }
            $attributes = $orderFeedbackModel->attributes();
            $orderData['frl_feedback'] = $attributes['feedback'];
            $orderData['frl_rating'] = $attributes['rating'];
            //Сохранить действие в историю
            $history->saveFeedback($is_emp, $fbtype);
            //Чистим кеш кол-во новых сообщений юзера после написания комментария
            $orderModel->clearCountEvent($orderData["emp_id"]);
        }
        $tserviceOrderStatusWidget = new TServiceOrderStatus();
        $tserviceOrderStatusWidget->setIsEmp(false);
        $tserviceOrderStatusWidget->setOrder($orderData);
        $tserviceOrderStatusWidget->init();
        ob_start();
        $tserviceOrderStatusWidget->run();
        $sHtml = ob_get_contents();
        ob_end_clean();
        $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $sHtml);
        $objResponse->script('window.order_feedback_factory = new OrderFeedbackFactory();');
    } catch (Exception $e) {
        $error = $e->getMessage();
    }
    if ($error !== false) {
        //Если есть ошибки то статус не обновляется и
        //в окошке попапа можно их показать или просто закрыть его
        $idx = ReservesPayoutPopup::getPopupId($order_id);
        $objResponse->script("\n            var rp = window.reserves_payout_factory.getReservesPayout('{$idx}');\n            if(rp) " . (!empty($error) ? "rp.show_error('{$error}');" : "rp.close_popup();\n        "));
    } else {
        //иначе статус обновился и нужно обновить JS события
        $objResponse->script("\n            Bar_Ext.popuper();\n            window.reserves_payout_factory = new ReservesPayoutFactory();\n        ");
    }
    return $objResponse;
}
Пример #3
0
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php';
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/profiler.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/reqv.php');
//require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php');
//require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php');
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesPayout.php';
//------------------------------------------------------------------------------
$results = array();
//------------------------------------------------------------------------------
try {
    $reservesPayout = new ReservesPayout();
    $result = $reservesPayout->getDestinationCardSynonim('4149497813559384', '15100');
    //('4268033703545624', '1000000');
    print_r($result);
    exit;
    /*
    $request = new HTTP_Request2('https://paymentcard.yamoney.ru/gates/card/storeCard');
    $request->setMethod(HTTP_Request2::METHOD_POST)
            ->addPostParameter(array(
                'skr_destinationCardNumber' => '4268033703545624',
                'sum' => '1000000',
                //'skr_errorUrl' => 'fl.ru',
                //'skr_successUrl' => 'fl.ru'
                )); 
    
    
 public function getPayoutsInfo()
 {
     require_once ABS_PATH . '/classes/reserves/ReservesPayout.php';
     $reservesPayout = new ReservesPayout();
     $payoutList = $reservesPayout->getPayouts($this->getID());
     if ($payoutList) {
         foreach ($payoutList as $key => $payoutItem) {
             $payoutList[$key]['price'] = tservices_helper::cost_format($payoutItem['price'], true);
             $payoutList[$key]['status_txt'] = self::$_payout_status_txt[$payoutItem['status']];
             $payoutList[$key]['error'] = $payoutItem['error'] == 0 ? 'нет' : $payoutItem['error'];
             $payoutList[$key]['date'] = date('d.m.Y H:i', strtotime($payoutItem['date']));
             $payoutList[$key]['last'] = $payoutItem['last'] ? date('d.m.Y H:i', strtotime($payoutItem['last'])) : ' — ';
             $payoutList[$key]['techmessage'] = $payoutList[$key]['techmessage'] ? $payoutList[$key]['techmessage'] : ' — ';
         }
     }
     $payoutReqv = $reservesPayout->getPayoutReqv($this->getID());
     if ($payoutReqv) {
         require_once ABS_PATH . '/classes/reserves/ReservesPayoutPopup.php';
         $payoutReqv['pay_type_txt'] = ReservesPayoutPopup::$payments_short_text[$payoutReqv['pay_type']];
         $payoutReqv['date'] = date('d.m.Y H:i', strtotime($payoutReqv['date']));
         $payoutReqv['last'] = $payoutReqv['last'] ? date('d.m.Y H:i', strtotime($payoutReqv['last'])) : ' — ';
         $payoutReqv['fields'] = mb_unserialize($payoutReqv['fields']);
         $payoutReqv['is_bank'] = $payoutReqv['pay_type'] == ReservesPayoutPopup::PAYMENT_TYPE_BANK;
         $payoutReqv['is_allow_change_status'] = $payoutReqv['is_bank'] && !$this->isStatusPayPayed();
     }
     $payoutLog = $reservesPayout->getErrorLog($this->getID());
     $payouts = array('list' => $payoutList, 'reqv' => $payoutReqv, 'log' => $payoutLog);
     return $payouts;
 }
Пример #5
0
     throw new Exception('No order_id param');
 }
 if (!$type) {
     throw new Exception('No type param');
 }
 $orderModel = TServiceOrderModel::model();
 $orderModel->attributes(array('is_adm' => true));
 $orderData = $orderModel->getCard($order_id, 0);
 if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) {
     throw new Exception('None');
 }
 $reserveInstance = $orderModel->getReserve();
 if (!$reserveInstance->isAllowPayout($orderData['frl_id']) || !$reserveInstance->isFrlAllowFinance()) {
     throw new Exception('Not isAllowPayout');
 }
 $reservesPayout = new ReservesPayout();
 $status = $reservesPayout->requestPayout($reserveInstance, $type);
 $results['status'] = (int) $status;
 $is_done = $reserveInstance->changePayStatus($status);
 $results['is_done'] = (int) $is_done;
 if ($is_done) {
     //@todo: передача данных устаревший способ но оставляем для поддержки пока
     //посностью не передем на обьекты
     $orderData['reserve_data'] = $reserveInstance->getReserveData();
     //@todo: правильный способ - нужно оперировать обьектами
     $orderData['reserve'] = $reserveInstance;
     try {
         $doc = new DocGenReserves($orderData);
         //$doc->generateInformLetterFRL();
         //@todo: генерируем документ когда резерв закрыт после всех выплат
         if ($reserveInstance->isClosed()) {