function addvisit_2_exec($Frm, $Err) { if (!$Err) { if (!isset($_SESSION["make_visit_tmp"]["klient"])) { $Frm->_gui->ERR("Клиент не определен"); return; } $kln = kln_get($_SESSION["make_visit_tmp"]["klient"]); if (!$kln) { $Frm->_gui->ERR("Клиент не определен"); return; } $ord_id = 0; if (isset($_SESSION["make_visit_tmp"]["order"]) && intval($_SESSION["make_visit_tmp"]["order"])) { $ord_id = intval($_SESSION["make_visit_tmp"]["order"]); if (!Order::find($ord_id)) { $Frm->_gui->ERR("Заказ не найден"); return; } } // Проверить время $t1 = $Frm->GetNmValue("start"); $t2 = $Frm->GetNmValue("finish"); if ($t2 <= $t1) { $Frm->_gui->ERR("Некорректно задано время"); return; } $dt = explode("-", $_SESSION["make_visit_tmp"]["date"]); $dt = mktime(0, 0, 0, $dt[1], $dt[0], $dt[2]); $fil = intval($_SESSION["make_visit_tmp"]["filial_id"]); if ($fil <= 0) { $Frm->_gui->ERR("Некорректный филиал"); return false; } $courier_id = $Frm->GetNmValueI("user"); $visits = db::get_single_value("SELECT COUNT(*) FROM " . TABLE_VISITS . " WHERE user_id = " . db::input($courier_id) . " AND tm_start <= " . db::input($t1) . " AND tm_finish > " . db::input($t1) . " AND date = " . db::input($dt)); if ($visits) { $Frm->_gui->ERR("На это время уже назначена встреча"); return false; } $vis_id = Meeting::create(array("user_id" => $courier_id, "date" => $dt, "status" => 0, "tm_start" => $t1, "tm_finish" => $t2, "client_id" => $kln["id"], "order_id" => $ord_id, "filial_id" => $fil, "created" => time(), "creator_id" => $_SESSION["user"]["data"]["id"], "summa" => $_SESSION["make_visit_tmp"]["summa1"], "about" => $_SESSION["make_visit_tmp"]["about"], "opisanie_klienta" => $Frm->GetNmValueH("opisanie_klienta"), "opisanie_pyti" => $Frm->GetNmValueH("opisanie_pyti"), "station_id" => $Frm->GetNmValueI("station"))); $Frm->_gui->OK("Встреча создана"); // Создаем сообщение при необходимости if ($courier_id != $_SESSION["user"]["data"]["id"]) { $prior = 1; $msg_id = mls_Send("u" . $courier_id, "u" . $_SESSION["user"]["data"]["id"], "Новая встреча №" . $vis_id, "Вы проводите встречу " . date("d.m.Y", $dt) . " c " . utils_cvt_i2times($t1) . " по " . utils_cvt_i2times($t2) . "." . " <a href='?section=vis&subsection=2&visit=" . $vis_id . "'>Подробнее...</a><br>Внимание! Ответ на данное сообщение обязателен!", $prior, 0, 0, 0, 0, $vis_id, 0); if ($msg_id) { \Components\Classes\Author::enqueue_message_to_email($msg_id, array($courier_id), \Components\Entity\EmailNotificationType::TO_CLIENT_ON_ORDER_CHANGE); Meeting::update($vis_id, array('uved_umsg' => $msg_id)); } } page_reloadToSec("2"); } }
foreach ($orders as $order_id) { $order_id = trim($order_id); if (empty($order_id)) { continue; } $order_info = get_order_info($order_id); if ($order_info['referrer_payment_status'] == 0) { Order::update($order_id, array('referrer_payment_status' => 1, 'referrer_payment_date' => date('Y-m-d H:i:s'))); } } $result[] = 'Оплачено'; break; } if ($bDoUpdate) { Order::update($_GET['order_id'], array($_GET['field'] => $value)); $order_info = Order::find($_GET['order_id']); if ($bDoHistoryUpdate) { $data = array('change_date' => time(), 'change_user_id' => $_SESSION['user']['data']['id'], 'order_id' => $_GET['order_id'], 'filial_id_new' => $order_info['filial_id'], 'klient_id_new' => $order_info['klient_id'], 'vuz_id_new' => $order_info['vuz_id'], 'vuz_user_new' => $order_info['vuz_user'], 'type_id_new' => $order_info['type_id'], 'type_user_new' => $order_info['type_user'], 'napr_id_new' => $order_info['napr_id'], 'disc_id_new' => $order_info['disc_id'], 'disc_user_new' => $order_info['disc_user'], 'time_kln_new' => $order_info['time_kln'], 'cost_kln_new' => $order_info['cost_kln'], 'payment_id_new' => $order_info['payment_id'], 'subject_new' => $order_info['subject'], 'about_kln_new' => $order_info['about_kln'], 'about_mng_new' => $order_info['about_mng'], 'kurs_new' => $order_info['kurs'], 'prakt_pc_new' => $order_info['prakt_pc'], 'pages_min_new' => $order_info['pages_min'], 'pages_max_new' => $order_info['pages_max'], 'src_min_new' => $order_info['src_min'], 'src_max_new' => $order_info['src_max'], 'from_id_new' => $order_info['from_id'], 'oform_new' => $order_info['oform'], 'next_rel_date_new' => $order_info['next_rel_date'], 'status_id_new' => $order_info['status_id'], 'ok_comment_new' => $order_info['ok_comment'], 'ok_comment_date_new' => $order_info['ok_comment_date'], 'payment_comment_new' => $order_info['payment_comment'], 'cost_auth_new' => $order_info['cost_auth'], 'time_auth_new' => $order_info['time_auth'], 'oplata_kln_new' => $order_info['oplata_kln'], 'author_paid_new' => $order_info['author_paid'], 'company_paid_new' => $order_info['company_paid'], 'filial_id_old' => $order_info['filial_id'], 'klient_id_old' => $order_info['klient_id'], 'vuz_id_old' => $order_info['vuz_id'], 'vuz_user_old' => $order_info['vuz_user'], 'type_id_old' => $order_info['type_id'], 'type_user_old' => $order_info['type_user'], 'napr_id_old' => $order_info['napr_id'], 'disc_id_old' => $order_info['disc_id'], 'disc_user_old' => $order_info['disc_user'], 'time_kln_old' => $order_info['time_kln'], 'cost_kln_old' => $order_info['cost_kln'], 'payment_id_old' => $order_info['payment_id'], 'subject_old' => $order_info['subject'], 'about_kln_old' => $order_info['about_kln'], 'about_mng_old' => $order_info['about_mng'], 'kurs_old' => $order_info['kurs'], 'prakt_pc_old' => $order_info['prakt_pc'], 'pages_min_old' => $order_info['pages_min'], 'pages_max_old' => $order_info['pages_max'], 'src_min_old' => $order_info['src_min'], 'src_max_old' => $order_info['src_max'], 'from_id_old' => $order_info['from_id'], 'oform_old' => $order_info['oform'], 'next_rel_date_old' => $order_info['next_rel_date'], 'status_id_old' => $order_info['status_id'], 'ok_comment_old' => $order_info['ok_comment'], 'ok_comment_date_old' => $order_info['ok_comment_date'], 'payment_comment_old' => $order_info['payment_comment'], 'cost_auth_old' => $order_info['cost_auth'], 'time_auth_old' => $order_info['time_auth'], 'oplata_kln_old' => $order_info['oplata_kln'], 'author_paid_old' => $order_info['author_paid'], 'company_paid_old' => $order_info['company_paid']); $data[$_GET['field'] . '_new'] = $_GET['value']; OrderHistory::create($data); } } } break; case 'get': if (!empty($_GET['field'])) { switch ($_GET['field']) { case 'status_id': $result[] = db::get_select("SELECT id, status_name FROM " . TBL_PREF . "orders_status", 'status', '', $_GET['value'], 'class="instantEditNewValue"'); break; case 'referrer_payment_status':
if (!$vis) { $GUI->ERR("Встреча не найдена"); page_reloadSec(); } $kln = kln_get($vis["client_id"]); $ypos = 0; $frm = $GUI->Form("Редактирование встречи №" . $vis["id"], "600", "0"); $frm->OnExecute = "editvisit_exec"; $h = $frm->Hidden($vis["id"]); $h->linkName = "vid"; $frm->Label("Клиент: <b>" . $kln["fio"] . "</b>", 10, $ypos += 10); $b = $frm->Button("Инфо", 520, $ypos, 70); $b->Event = 'window.open("?section=kln&subsection=2&edit=' . $kln["id"] . '");'; $ord = false; if ($vis["order_id"]) { $ord = Order::find($vis["order_id"]); $frm->Label("Заказ: <b>" . $ord["id"] . ". " . utils_crop_text($ord["subject"], 110) . "</b>", 10, $ypos += 30); $b = $frm->Button("Инфо", 520, $ypos, 70); $b->Event = 'window.open("?section=ord&subsection=2&p=1&order=' . $ord["id"] . '");'; } if ($vis["filial_id"] > 0) { // филиал $s = "филиал '" . $data_filials[$vis["filial_id"]]["name"] . "'"; } else { // курьер $s = "с курьером"; } $frm->Label("Место проведения: <b>" . $s . "</b>", 10, $ypos += 30); $frm->Label("Проводит: <b>" . sotr_getFullName($vis["user_id"]) . "</b>", 10, $ypos += 30); $frm->VLine(10, $ypos += 30, 580); $frm->Label("Цель встречи:", 10, $ypos += 20);
/** * @param int $order_id Номер заказа * @param array $authors_ids id получателей * @param string $sender_id id отправителя с префиксом клиент/сотрудник (н-р "u330") * @param string $subject тема сообщения * @param string $body текст сообщения * @param int $notification_type тип сообщения, из набора EmailNotificationType::$NOTIFICATION_TYPES * @see EmailNotificationType * @return array|bool Добавляет внутреннее сообщение и ставит его в очередь рассылки по cron<br/>Массив ассоциативных массивов с ключами 'name' и 'email' тех, для кого сообщение не было создано или не поставлено в очередь рассылки | false в случае ошибки */ public static function saveMessageAndEnqueueEmail($order_id, array $authors_ids, $sender_id, $subject, $body, $notification_type) { static $order, $manager, $filial, $attachments; // Если не надо пихать в ядро - выходим типа все ок if (!EmailNotificationType::isPersistable($notification_type)) { return array(); } if (!is_array($authors_ids)) { if (is_numeric($authors_ids)) { $authors_ids = array($authors_ids); } else { return false; } } if (empty($order)) { try { $order = Order::find($order_id); } catch (Exception $e) { return false; } } if (empty($manager)) { try { $manager = Employee::find($order['manager_id']); } catch (Exception $e) { return false; } } $replyTo = array('email' => $manager['email'], 'name' => $manager['fio']); $result = array(); foreach ($authors_ids as $id) { if (is_numeric($id)) { try { $author = Employee::find($id); } catch (Exception $e) { continue; } $receiver = array('email' => $author['email'], 'name' => $author['fio']); //Сохраняем уведомление $message_id = Message::create(array('parent_id' => 0, 'order_id' => $order_id, 'klient_id' => $order['klient_id'], 'visit_id' => 0, 'tender_id' => 0, 'created' => time(), 'creator_id' => $sender_id, 'addr' => 'u' . $id, 'subject' => $subject, 'text' => $body, 'prior' => 1, 'uvedom' => 1, 'readed' => 0, 'needansv' => 0, 'basket' => 0)); if (!empty($message_id)) { //Ставим в очередь на отправку по cron $email_notification = enqueue_message_to_email($message_id, $author['email'], $notification_type); } if (empty($email_notification)) { $result[] = $receiver; } } else { $ids = explode(', ', $id); $temp_result = self::saveMessageAndEnqueueEmail($order_id, $ids, $sender_id, $subject, $body, $notification_type); if (count($temp_result)) { array_push($result, $temp_result); } } } return $result; }
/** * @deprecated * @param $id * @return array */ function ord_get($id) { return Order::find($id); }
need_data('data_payments'); need_data('data_filials'); const LISTING_PAGE_VIEW = 1; const LISTING_PAGE_EDIT = 2; const LISTING_PAGE_MANAGING = 3; const LISTING_PAGE_FILES = 4; const LISTING_PAGE_CHANGE_HISTORY = 5; const LISTING_PAGE_REMOVE_OR_ASSIGN_AUTHOR = 6; const LISTING_PAGE_NOTIFY = 7; const NOTIFICATION_TYPE_NORMAL = 1; const NOTIFICATION_TYPE_URGENT = 2; page_ScriptNeed("gui_table.js", "gui"); if (isset($_REQUEST["p"])) { $order_id = intval(@$_REQUEST["order"]); try { $order_info = Order::find($order_id); } catch (Exception $e) { $GUI->ERR("Заказ не найден"); page_ReloadSec(); } $GUI->mmenu->selected->selected->caption = "Управление заказом #" . $order_id; if (Roles::isActionAllowed($GUI->mmenu->selected->id, $GUI->mmenu->selected->selected->id, $_SESSION["user"]["data"]["group_id"], "Просмотр содержания")) { $GUI->cmdmenu->AddItem("Просмотр содержания", "?section=ord&subsection=2&order=" . $order_id . "&p=1"); } if (Roles::isActionAllowed($GUI->mmenu->selected->id, $GUI->mmenu->selected->selected->id, $_SESSION["user"]["data"]["group_id"], "Правка содержания")) { $GUI->cmdmenu->AddItem("Правка содержания", "?section=ord&subsection=2&order=" . $order_id . "&p=2"); } if (Roles::isActionAllowed($GUI->mmenu->selected->id, $GUI->mmenu->selected->selected->id, $_SESSION["user"]["data"]["group_id"], "Распределение")) { $GUI->cmdmenu->AddItem("Распределение", "?section=ord&subsection=2&order=" . $order_id . "&p=3"); } if (Roles::isActionAllowed($GUI->mmenu->selected->id, $GUI->mmenu->selected->selected->id, $_SESSION["user"]["data"]["group_id"], "Файлы")) {
function assign_order_to_author($Frm, $Err) { if (!$Err) { $order_id = $Frm->GetNmValueI("order_id"); try { $order_info = Order::find($order_id); } catch (Exception $e) { ErrorLogger::add('assign_order_to_author', 'Sessia', $_SESSION); ErrorLogger::add('assign_order_to_author', 'REQUEST', $_REQUEST); ErrorLogger::add('assign_order_to_author', 'GET', $_GET); ErrorLogger::add('assign_order_to_author', 'POST', $_POST); $Frm->_gui->ERR("Произошла ошибка"); page_reloadAll(); } $author_id = $Frm->GetNmValueI("author_id"); $status_id = get_status_id_by_iname("ASSIGNED"); if (!$status_id) { $Frm->_gui->ERR("Статус не найден"); page_reloadAll(); } Order::update($order_id, array('author_id' => $author_id, 'status_id' => $status_id)); if ($Frm->GetNmValueI("need_offer")) { if (!AuthorOffer::findOneBy(array('order_id' => $order_id, 'author_id' => $author_id))) { AuthorOffer::create(array('order_id' => $order_id, 'author_id' => $author_id, 'price' => $order_info['cost_auth'], 'comment' => '')); } } if ($order_info['disc_id'] == 0) { $spec = $order_info['disc_user']; } else { $spec = get_discipline_name($order_info['disc_id']); } $txt = "Заказ закреплен"; if (\Components\Entity\EmailNotificationType::isPersistable(\Components\Entity\EmailNotification::TO_AUTHOR_ON_ASSIGN)) { $body = "На вас назначен заказ №" . $order_id . ' ' . ucfirst($spec) . "<br>" . "<b>Обязательно подтвердите закрепление за Вами данного заказа</b>, достаточно в ответном письме написать \"OK\""; $message_id = mls_Send("u" . $author_id, "u" . $_SESSION["user"]["data"]["id"], "На вас назначен заказ №" . $order_id . ' ' . ucfirst($spec), $body, 1, 0); Author::enqueue_message_to_email($message_id, array($author_id), \Components\Entity\EmailNotification::TO_AUTHOR_ON_ASSIGN); $txt = "Заказ закреплен, уведомление отправлено"; } $old_author_id = $Frm->GetNmValueI("old_author_id"); if ($old_author_id != 0) { if (\Components\Entity\EmailNotificationType::isPersistable(\Components\Entity\EmailNotification::TO_AUTHOR_ON_UNASSIGN)) { $message_id = mls_Send("u" . $old_author_id, "u" . $_SESSION["user"]["data"]["id"], "Вы сняты с заказа №" . $order_id, "Вас сняли с заказа №" . $order_id . "<br>Причина: " . $Frm->GetNmValueH("reason"), 1, 0); Author::enqueue_message_to_email($message_id, array($old_author_id), \Components\Entity\EmailNotification::TO_AUTHOR_ON_UNASSIGN); } } // Author::sendEmail($order_id, array($author_id), 'Закрепление заказа №' . $order_id . ' ' . ucfirst($spec), 'Заказ №' . $order_id . ' ' . ucfirst($spec) . ' закреплен за вами'); $Frm->_gui->OK($txt); redirect('index.php?section=ord&subsection=2&order=' . $order_id . '&p=3'); } }
<?php use Components\Entity\Order; use Components\Exceptions\Exception; use Components\Classes\db; use Components\Entity\OrderFile; use Components\Entity\Message; if (!is_client_logged() || $_SESSION["frame"]["client"]["blocked"]) { echo 'Доступ запрещен.'; } else { if (isset($_REQUEST["order"])) { try { $order = Order::find($_REQUEST["order"]); } catch (Exception $e) { redirect('/frame?type=cabinet'); } if (isset($_POST['add_file'])) { if (is_uploaded_file($_FILES["zf_work_file"]["tmp_name"])) { // Формируем новое имя файла $path = TMPFILES_PATH . session_id(); if (!file_exists($path)) { @mkdir($path); } if (file_exists($path)) { $new_name = $path . "/" . $_FILES["zf_work_file"]["name"]; if (file_exists($new_name)) { unlink($new_name); } move_uploaded_file($_FILES["zf_work_file"]["tmp_name"], $new_name); } }