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)); }
/** * Выплата по резерву * * @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; }
} ?> " 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']; ?> );">
/** * Новый отзыв по заказу ТУ * * @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; }