コード例 #1
0
 public function run()
 {
     $is_allow_feedback = (!$this->order['close_date'] || TServiceOrderFeedbackModel::isAllowFeedback($this->order['close_date'])) && (!isset($this->order['reserve']) || $this->order['reserve']->isAllowFeedback($this->is_emp));
     $date_feedback = ($this->order['close_date'] ? strtotime($this->order['close_date']) : time()) + TServiceOrderFeedbackModel::LIFETIME;
     $date_feedback_formatted = date("d.m.Y H:i", $date_feedback);
     //собираем шаблон
     $this->render('t-service-order-status', array('is_adm' => !$this->is_owner, 'user' => $this->order[$this->is_emp ? 'freelancer' : 'employer'], 'order_id' => $this->order['id'], 'order_status' => $this->order['status'], 'is_emp' => $this->is_emp, 'tax' => $this->order['tax'], 'tax_price' => $this->order['tax_price'], 'freelancer' => @$this->order['freelancer'], 'employer' => @$this->order['employer'], 'frl_feedback_id' => $this->order['frl_feedback_id'], 'frl_feedback' => $this->order['frl_feedback'], 'is_frl_feedback' => !empty($this->order['frl_feedback']), 'frl_is_good' => $this->order['frl_rating'] > 0, 'frl_rating' => intval($this->order['frl_rating']), 'emp_feedback_id' => $this->order['emp_feedback_id'], 'emp_feedback' => $this->order['emp_feedback'], 'is_emp_feedback' => !empty($this->order['emp_feedback']), 'emp_is_good' => $this->order['emp_rating'] > 0, 'emp_rating' => intval($this->order['emp_rating']), 'is_allow_feedback' => $is_allow_feedback, 'date_feedback' => $date_feedback_formatted, 'order_title' => $this->order['title'], 'order_price' => $this->order['order_price'], 'order_days' => $this->order['order_days'], 'pay_type' => $this->order['pay_type'], 'is_reserve_accepted' => isset($this->order['reserve_data']), 'reserve_data' => @$this->order['reserve_data'], 'reserve' => @$this->order['reserve'], 'is_list' => $this->is_list));
 }
コード例 #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
        }
        ?>
" id="op_message_<?php 
        echo $theme['id'] . $uniq_id_sufix;
        ?>
">
                            <?php 
        echo reformat($theme['descr'], 30, 0, 0, 1);
        ?>
                        </div>
                        <?php 
        if ($theme['opinion_type'] == 2) {
            $is_allow_edit = FALSE;
            $is_owner = $theme['touser_id'] == $uid;
            if ($is_owner) {
                $is_allow_edit = $theme['sbr_rating'] < 0 || TServiceOrderFeedbackModel::isAllowFeedback($theme['posted_time']);
            }
            $is_allow_edit = $is_tservices_adm || $is_allow_edit;
            $is_allow_delete = $is_tservices_adm || $is_owner;
            ?>
                            <?php 
            if ($is_allow_edit || $is_allow_delete) {
                ?>
                        <div class="b-post__foot b-post__foot_padtop_10">
                            <?php 
                if ($is_allow_edit) {
                    ?>
                            <a class="b-post__link b-post__link_dot_c10601" href="javascript:void(0)" onclick="xajax_tservicesOrdersEditFeedback(<?php 
                    echo $theme['id'];
                    ?>
);">
コード例 #4
0
/**
 * Новый отзыв по заказу ТУ
 * 
 * @global type $uid
 * @global type $orderModel
 * @param type $params
 * @return \xajaxResponse
 */
function tservicesOrdersNewFeedback($params)
{
    $uid = get_uid(false);
    $orderModel = TServiceOrderModel::model();
    $objResponse =& new xajaxResponse();
    $order_id = intval(@$params['oid']);
    $hash = @$params['hash'];
    $test_hash = md5(TServiceOrderModel::SOLT . $order_id);
    if ($uid <= 0 || $hash !== $test_hash) {
        return $objResponse;
    }
    $memebuff = new memBuff();
    if ($memebuff->get('feedback_process_' . $order_id)) {
        return $objResponse;
    }
    $memebuff->set('feedback_process_' . $order_id, true);
    $is_emp = is_emp();
    $prefix = $is_emp ? 'emp' : 'frl';
    $sufix = $is_emp ? 'frl' : 'emp';
    $allow_status = array(TServiceOrderModel::STATUS_ACCEPT, TServiceOrderModel::STATUS_FIX, TServiceOrderModel::STATUS_EMPCLOSE, TServiceOrderModel::STATUS_FRLCLOSE);
    $feedback = @$params['feedback'];
    $is_feedback = !empty($feedback);
    $fbtype = @$params['fbtype'];
    $orderData = $orderModel->getCard($order_id, $uid);
    //Если не существует или статус не подходящий
    if (!$orderData || !in_array($orderData['status'], $allow_status)) {
        $memebuff->delete('feedback_process_' . $order_id);
        return $objResponse;
    }
    //Если есть отзыв и он не удален
    if (!empty($orderData[$prefix . '_feedback'])) {
        $memebuff->delete('feedback_process_' . $order_id);
        return $objResponse;
    }
    $order_id = $orderData['id'];
    $status = $orderData['status'];
    if ($orderModel->isDisallowFeedback()) {
        $memebuff->delete('feedback_process_' . $order_id);
        return $objResponse;
    }
    //Меняем статус при необходимости и тем самым закрываем заказ
    if ($status != TServiceOrderModel::STATUS_EMPCLOSE) {
        try {
            $new_status = $orderModel->changeStatus($order_id, 'close', $is_emp, $fbtype);
        } catch (Exception $e) {
            $sHtml = tservices_helper::getMessage($e->getMessage(), 'error');
            $objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml);
            $memebuff->delete('feedback_process_' . $order_id);
            return $objResponse;
        }
        $orderData['status'] = $new_status;
    }
    //Сохраняем отзыв если он есть
    if ($is_feedback) {
        $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)) {
            $memebuff->delete('feedback_process_' . $order_id);
            return $objResponse;
        }
        $attributes = $orderFeedbackModel->attributes();
        $orderData[$prefix . '_feedback'] = $attributes['feedback'];
        $orderData[$prefix . '_rating'] = $attributes['rating'];
        //Сохранить действие в историю
        $history = new tservices_order_history($order_id);
        $history->saveFeedback($is_emp, $fbtype);
        //Чистим кеш кол-во новых сообщений юзера после написания комментария
        $orderModel->clearCountEvent($orderData["{$sufix}_id"]);
        /*
                if ($status == TServiceOrderModel::STATUS_EMPCLOSE && $is_emp && $fbtype < 0) 
                {
           $orderModel->cancelTax($order_id);
                }
        */
    }
    //Уведомление на почту
    $tservices_smail = new tservices_smail();
    $tservices_smail->attributes(array('order' => $orderData, 'is_emp' => $is_emp));
    $tservices_smail->closeOrderAndFeedback($status);
    $tserviceOrderStatusWidget = new TServiceOrderStatus();
    $tserviceOrderStatusWidget->setIsEmp($is_emp);
    $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);
    //если фрилансер закрывает заказ или оставляет отзыв
    //то обновляем ему информацию о состоянии счета
    if (!$is_emp) {
        //не показываем отрицательную сумму
        //$balance = ($_SESSION['ac_sum'] > 0)?number_format(round(zin($_SESSION['ac_sum']),2), 2, ",", " ").' руб.':'Мои услуги';
        //$balance = '<span class="b-bar__icon b-bar__icon_fm"></span>' . $balance;
        //для новой шапки
        $balance = number_format(round(zin($_SESSION['ac_sum']), 2), 2, ",", " ") . ' Р';
        $objResponse->script("\$\$('.b-user-menu-wallet-clause a').set('html', '" . $balance . "');");
    }
    //Обновляем события так как у mootools нет Live
    //а Delegation не работает.
    $objResponse->script('
        Bar_Ext.popuper();
        window.order_feedback_factory = new OrderFeedbackFactory();
    ');
    $memebuff->delete('feedback_process_' . $order_id);
    return $objResponse;
}