Example #1
0
 function event_desk_author_user($desk_id)
 {
     // Автор действия не должен получать уведомления о каких-то изменениях;
     if (get_desk_author_user($desk_id) != $_SESSION['user_id'] && get_desk_author_user($desk_id) != '') {
         send_notification(get_desk_author_user($desk_id), 'В заявке №' . $desk_id . ' произошли новые события<br>Нажмите для перехода в список заявок.', 'service_desk', '', '1', $desk_id);
     }
 }
Example #2
0
function get_desk_item($desks_array, $no_buttons = '')
{
    global $systems, $db_rs, $elements;
    $html = '';
    write_log(print_r($desks_array, true), 'desk_array');
    foreach ($desks_array as $desk) {
        // ID образения;
        $desk_id = $desk['id'];
        // Получаем нормальную дату;
        $date_create = date('d.m.Y H:i:s', strtotime($desk['datetime_create']));
        $date_update = date('d.m.Y H:i:s', strtotime($desk['datetime_last_update']));
        // Получаем имя автора;
        $author = $systems->get_user_avatar_and_full_name($desk['author_user_id']);
        /*
        $sql = "SELECT CONCAT(`fam`, ' ', `name`) as `name` FROM `users` WHERE `login` = '".$author_id."';";
        $author = $db->one($sql);
        */
        // Текст обращения;
        $desk_message = str_replace("\n", '<br>', $desk['desk_text']);
        // Статус обращения;
        $status = $desk['status'];
        if ($status == '1') {
            $status_text = 'Новоя заявка';
        }
        if ($status == '2') {
            $status_text = 'Заявка принята';
        }
        if ($status == '3') {
            $status_text = 'Заявка выполняется';
        }
        if ($status == '4') {
            $status_text = 'Отказ в выполнении';
        }
        if ($status == '5') {
            $status_text = 'Ожидание подтверждения выполнения';
        }
        if ($status == '6') {
            $status_text = 'Заявка не выполнена';
        }
        if ($status == '7') {
            $status_text = 'Заявка выполнена';
        }
        if ($status == '1') {
            $move_color = 1;
        }
        // Желтый
        if ($status == '2' || $status == '3') {
            $move_color = 4;
        }
        // Зеленый цвет;
        if ($status == '7' || $status == '5') {
            $move_color = 3;
        }
        // Красный свет
        if ($status == '6' || $status == '4') {
            $move_color = 2;
        }
        // Но если у заявки нет исполнителя, мы все равно красим ее в красный цвет;
        if ($desk['todo_user_id'] == '') {
            $move_color = 2;
        }
        $html .= '<div class="desk_item notification_type_' . $move_color . '" id="' . $desk_id . '" style="min-height: 478px;font-size: 0.85em; padding: 10px 10px 10px 10px; vertical-align:top;">';
        $html .= '<div id="hidden_desk_window_id_' . $desk_id . '" window_id="" style="display: none;"></div>';
        $html .= '<table style="border: none;" cellspacing="0" cellpadding="0">';
        $html .= '<tr>';
        $html .= '<td style="text-align: right">Номер заявки:</td>';
        $html .= '<td><b>' . $desk_id . '</b></td>';
        $html .= '<td style="text-align: right">Принадлежность:</td>';
        $html .= '<td>';
        // Здесь мы выводим принадлежности пользователь к заявке;
        $html .= "<script>\$('.user_desk').tipsy();</script>";
        if ($desk['author'] == '1') {
            $html .= '<img src="/templates/images/icons/author.png" class="user_desk" title="Вы автор" width="24px" style="margin: 3px;"/>';
        }
        if ($desk['boss'] == '1') {
            $html .= '<img src="/templates/images/icons/boss.png" class="user_desk" title="Заявка вашего отдела" width="24px" style="margin: 3px;"/>';
        }
        if ($desk['todo'] == '1') {
            $html .= '<img src="/templates/images/icons/todo.png" class="user_desk" title="Вы исполнитель" width="24px" style="margin: 3px;"/>';
        }
        if ($desk['viewer'] == '1') {
            $html .= '<img src="/templates/images/icons/viewer.png" class="user_desk" title="Вы наблюдатель" width="24px" style="margin: 3px;"/>';
        }
        // Если у нас есть вложенные заявки, надо их отобразить;
        $sql = "SELECT `id` FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "';";
        $child_desk = $db_rs->all($sql);
        if (count($child_desk) > 0) {
            $html .= '<img src="/templates/images/icons/parent_desk.png" class="user_desk" title="Эта заявка имеет вложенные заявки" width="24px" style="margin: 3px;"/>';
        }
        if ($desk['parent_id'] != '') {
            $html .= '<img src="/templates/images/icons/desk_child.png" class="user_desk" title="Это вложенная заявка" width="24px" style="margin: 3px;"/>';
        }
        if ($desk['date_todo_view'] != '') {
            $html .= '<img src="/templates/images/icons/desk_opened.png" class="user_desk" title="Исполнитель просмотрел заявку в: ' . get_local_date_time($desk['date_todo_view'], 1) . '" width="20px" style="margin: 3px;"/>';
        }
        $html .= '</td>';
        $html .= '</tr>';
        // Если у нас есть вложенные заявки, надо их отобразить;
        $sql = "SELECT `id` FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "';";
        $child_desk = $db_rs->all($sql);
        if (count($child_desk) > 0) {
            // Осталвляем ссылки на детей этой заявки;
            $html .= '<tr>';
            $html .= '<td style="text-align: right; vertical-align: top;">Вложенные заявки:</td>';
            $html .= '<td><b>';
            foreach ($child_desk as $child) {
                // Получаем статус вложенной заявки;
                $sql = "SELECT `status` FROM `service_desk` WHERE `id` = '" . $child['id'] . "';";
                $child_desk_status = $db_rs->one($sql);
                if ($child_desk_status == '1') {
                    $child_status_text = 'Новоя заявка';
                }
                if ($child_desk_status == '2') {
                    $child_status_text = 'Заявка принята';
                }
                if ($child_desk_status == '3') {
                    $child_status_text = 'Заявка выполняется';
                }
                if ($child_desk_status == '4') {
                    $child_status_text = 'Отказ в выполнении';
                }
                if ($child_desk_status == '5') {
                    $child_status_text = 'Ожидание подтверждения выполнения';
                }
                if ($child_desk_status == '6') {
                    $child_status_text = 'Заявка не выполнена';
                }
                if ($child_desk_status == '7') {
                    $child_status_text = 'Заявка выполнена';
                }
                $html .= '<div onclick="show_desk_window(' . $child['id'] . ', \'new\')" style="cursor:pointer;">' . $child['id'] . ' ( ' . $child_status_text . ' )</div>';
            }
            $html .= '</b></td>';
            $html .= '</tr>';
        }
        // Если заявка имеет родителя, то нам надо оставить ссылку на родительскую заявку;
        if ($desk['parent_id'] != '') {
            // Получаем статус вложенной заявки;
            $sql = "SELECT `status` FROM `service_desk` WHERE `id` = '" . $desk['parent_id'] . "';";
            $parent_desk_status = $db_rs->one($sql);
            if ($parent_desk_status == '1') {
                $parent_status_text = 'Новоя заявка';
            }
            if ($parent_desk_status == '2') {
                $parent_status_text = 'Заявка принята';
            }
            if ($parent_desk_status == '3') {
                $parent_status_text = 'Заявка выполняется';
            }
            if ($parent_desk_status == '4') {
                $parent_status_text = 'Отказ в выполнении';
            }
            if ($parent_desk_status == '5') {
                $parent_status_text = 'Ожидание подтверждения выполнения';
            }
            if ($parent_desk_status == '6') {
                $parent_status_text = 'Заявка не выполнена';
            }
            if ($parent_desk_status == '7') {
                $parent_status_text = 'Заявка выполнена';
            }
            $html .= '<tr>';
            $html .= '<td style="text-align: right; vertical-align: top;">Родительская заявка:</td>';
            $html .= '<td onclick="show_desk_window(' . $desk['parent_id'] . ', \'new\')" style="cursor:pointer;"><b>' . $desk['parent_id'] . ' ( ' . $parent_status_text . ' )</b></td>';
            $html .= '</tr>';
        }
        $html .= '<tr>';
        $html .= '<td style="text-align: right">Автор:</td>';
        $html .= '<td style="width: 398px;font-size: 0.9em;"><b>' . $author . '</b></td>';
        $html .= '<td style="text-align: right">Исполнитель:</td>';
        // Если пользователь у нас руководитель отдела по этому заявке, ему надо дать возможность менять испольнителя;
        if (get_desk_boss_id($desk_id) == 1 && $status != '7') {
            // Здесь мы будем строить выпдашку с пользователями;
            $sql = "select `id`, `user_full_name` as `name` FROM `users_apps` WHERE `dep_id` = '" . $_SESSION['department_id'] . "';";
            $users = $db_rs->all($sql);
            $html .= '<td><select id="desk_todo_user" desk_id="' . $desk_id . '" style="height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">';
            $html .= '<option value="none" disabled selected>Выберите исполнителя для заявки</option>';
            foreach ($users as $user) {
                $html .= '<option value="' . $user['id'] . '" ' . ($desk['todo_user_id'] == $user['id'] ? 'selected' : '') . '>' . $user['name'] . '</option>';
            }
            $html .= '</select></td>';
        } else {
            $html .= '<td style="font-size: 0.9em;width: 398px;"><b>' . $systems->get_user_avatar_and_full_name($desk['todo_user_id']) . '</b></td>';
        }
        $html .= '</tr>';
        $html .= '<tr>';
        $html .= '<td style="text-align: right">Офис в котором делалась заявка:</td>';
        $html .= '<td><b>' . get_office_name($desk['author_office']) . '</b></td>';
        $html .= '<td style="text-align: right">Для какого отдела заявка:</td>';
        $html .= '<td><b>' . get_department_name($desk['department_id']) . '</b></td>';
        $html .= '</tr>';
        $html .= '<tr>';
        $html .= '<td style="text-align: right">Тип заявки:</td>';
        $html .= '<td><b>' . get_desk_type_name($desk['type_id']) . '</b></td>';
        $html .= '<td style="text-align: right">Когда создано:</td>';
        $html .= '<td><b>' . $date_create . '</b></td>';
        $html .= '</tr>';
        $html .= '<tr>';
        $html .= '<td style="text-align: right">Предпочтительная дата исполнения:</td>';
        $html .= '<td><b>' . get_local_date_time($desk['date_dead_line']) . '</b></td>';
        $html .= '<td style="text-align: right">Последнее обновление:</td>';
        $html .= '<td><b>' . $date_update . '</b></td>';
        $html .= '</tr>';
        $html .= '<tr>';
        $html .= '<td style="text-align: right; vertical-align: top;">Статус:</td>';
        $html .= '<td><b>' . $status_text . '</b></td>';
        $html .= '</tr>';
        if ($desk['attache'] != '') {
            $html .= '<tr>';
            $html .= '<td style="text-align: right; vertical-align: top;">Прикрепленный заказ:</td>';
            $html .= '<td style="cursor: pointer;" onclick="show_info_window(' . $desk['attache'] . ', \'new\');"><b>' . $desk['attache'] . '</b></td>';
            $html .= '</tr>';
        }
        $html .= '<tr>';
        $html .= '<td style="text-align: right; vertical-align: top;">Текст обращения:</td>';
        $html .= '<td colspan="4" width="200px" style="-ms-word-break: break-all;word-break: break-all;word-break: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;"><b>' . $desk_message . '</b></td>';
        $html .= '</tr>';
        $html .= '</table>';
        //$html .=
        //$html .= '<div>';
        if ($no_buttons == '') {
            // Здесь мы выводим операционные кнопки для управления состоянием обращения, в зависимости от статуса обращения и пользователя, кнопки мгут быть разными;
            $html .= '<div id="desk_buttons">';
            // Если ты автор, исполнитель, или же руководитель отдела, ты можешь создать дочернюю заявку;
            $boss_array = get_department_boss(get_desk_department($desk_id));
            $boss = 0;
            foreach ($boss_array as $boss) {
                if ($boss == $_SESSION['user_id']) {
                    $boss = 1;
                }
            }
            if (($boss == 1 || get_desk_author_user($desk_id) == $_SESSION['user_id'] || get_desk_todo_user($desk_id) == $_SESSION['user_id']) && $status != '7') {
                $html .= $elements->button('Создать вложенную заявку', 'create_child_desk', '', '', '', 'desk_id="' . $desk_id . '"');
            }
            // Важно, что работать с наблюдателями может только либо автор заявки, либо реководитель отдела на который создана заявка;
            $boss_array = get_department_boss(get_desk_department($desk_id));
            $boss = 0;
            foreach ($boss_array as $boss) {
                if ($boss == $_SESSION['user_id']) {
                    $boss = 1;
                    break;
                }
            }
            if ((get_desk_author_user($desk_id) == $_SESSION['user_id'] || $boss == 1 || $_SESSION['department_id'] == 2) && $status != '7') {
                // Кнопки управления наблюдателями;
                $html .= '<div class="menu_button" onclick="$(\'#viewers_list_' . $desk_id . '\').toggle(\'fast\')">Работа с наблюдателями заявки</div><br>';
                // Форма для работы с наблюдателями;
                $html .= '<div id="viewers_list_' . $desk_id . '" style="display: none;">';
                $sql = "SELECT `users_apps`.`id`, `users_apps`.`user_full_name` as `user` FROM `service_desk_viewers`\n                    LEFT JOIN `users_apps` ON `users_apps`.`id` = `service_desk_viewers`.`viewer_user_id`\n                    WHERE `service_desk_id` = '" . $desk_id . "' AND `service_desk_viewers`.`status` != 0;";
                $viewers_array = $db_rs->all($sql);
                $html .= $elements->caption('Список наблюдателей');
                $html .= "<script>\$('.unview_desk').tipsy();</script>";
                $html .= '<br>';
                $html .= '<table style="margin-top: -8px;">';
                $html .= '<tr>';
                $html .= '<td class="row_top">Имя пользователя</td>';
                $html .= '<td class="inf_row row_top">Действие</td>';
                $html .= '</tr>';
                foreach ($viewers_array as $key => $viewers) {
                    // Визуальный класс чет нечет;
                    $class = '';
                    if ($key % 2 != 0) {
                        $class = 'row_1';
                    } else {
                        $class = 'row_2';
                    }
                    $html .= '<tr>';
                    $html .= '<td align="center" class="' . $class . '">' . $viewers['user'] . '</td>';
                    $html .= '<td align="center" class="' . $class . ' inf_row"><img class="unview_desk" desk_id="' . $desk_id . '" user_id="' . $viewers['id'] . '" style="cursor:pointer;" src="/templates/images/icons/close.png" title="Убрать пользователя из наблюдателей" height="16px"></td>';
                    $html .= '</tr>';
                }
                $html .= '</table>';
                // Получаем список всез сотрудников компании достпуных в новой системе
                $sql = "SELECT `users_apps`.`id`, CONCAT(`user_full_name`, ' (', `appointments`.`name`, ')') as `name` FROM `users_apps`\n                    LEFT JOIN `departments` ON `departments`.`id` = `users_apps`.`dep_id`\n                    LEFT JOIN `appointments` ON `appointments`.`id` = `users_apps`.`app_id`\n                    WHERE `users_apps`.`id` != '" . $_SESSION['user_id'] . "' ORDER BY `departments`.`id`;";
                $users = $db_rs->all($sql);
                $html .= $elements->caption('Вы можете добавить нового наблюдателя за заявкой');
                $html .= '<br>';
                $html .= '<select id="add_desk_viewer" desk_id="' . $desk_id . '" style="margin-top: -9px;height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">';
                $html .= '<option value="none" disabled selected>Выберите нового наблюдателя за заявкой</option>';
                foreach ($users as $user) {
                    $html .= '<option value="' . $user['id'] . '">' . $user['name'] . '</option>';
                }
                $html .= '</select>';
                $html .= '</div>';
            }
            // Всякие другие кнопки чисто для заявок;
            $boss_array = get_department_boss(get_desk_department($desk_id));
            $boss = 0;
            foreach ($boss_array as $boss) {
                if ($boss == $_SESSION['user_id']) {
                    $boss = 1;
                }
            }
            // Только руководитель отдела может одобрить заявку на выполнение;
            if ($boss == 1 && $status == '1') {
                $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 2);">Одобрить заявку для исполнения</div>';
            }
            // $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 4);">Отказать в выполнении</div>';
            // Только исполнитель может начать выполнение заявки;
            if (get_desk_todo_user($desk_id) == $_SESSION['user_id'] && $status == '2') {
                $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 3);$(\'#' . $desk_id . '\').closest(\'.refresh_window\').trigger(\'click\');">Начать выполнение</div>';
            }
            // Только исполнитель может завешить выполнение заявки;
            if (get_desk_todo_user($desk_id) == $_SESSION['user_id'] && ($status == '3' || $status == '6')) {
                // Важный момент, мы не можем "выполнить" заявку, если у нее есть не выполненные дочерние заявки;
                $sql = "SELECT COUNT(`id`) FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "' AND `status` != 7;";
                $bad_child = $db_rs->one($sql);
                // Если все вложенные заявки выполнены, мы можем провести и родителя;
                if ($bad_child == 0) {
                    $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 5);">Заявка выполнена</div>';
                }
            }
            // Только автор заявки может подтверджить выполнение заявки;
            if (get_desk_author_user($desk_id) == $_SESSION['user_id'] && ($status == '4' || $status == '5')) {
                $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 7);">Выполнение проверено</div>';
                $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 6);">Заявка не выполнена</div>';
            }
            $html .= '</div>';
        }
        $html .= '<div style="margin-top: 5px;  margin-bottom: 5px; margin-right: 10px; font-size: 0.9em;" align="center"><div class="menu_button" onclick="view_desk_dialog(' . $desk_id . ');">Показать диалог</div></div>';
        $html .= '<div class="dialog_' . $desk_id . '" style="margin-top: 0.5em;" hidden>';
        // Написать сообщение к обращению;
        //$html .= $elements->button();
        $html .= '<div style="display: inline-block;"><input style="width: 46.9em;" type="text" desk_id="' . $desk_id . '" id="desk_message_text_' . $desk_id . '" value="" onkeydown = "if(event.which == 13) add_new_desk_chat_message(this, ' . $desk_id . ')">';
        $html .= '</div>';
        $html .= get_desk_chat($desk_id);
        $html .= '</div>';
        $html .= '</div>';
    }
    return $html;
}
Example #3
0
 function event_desk_author_user($desk_id, $event_text, $not_event_users)
 {
     global $systems;
     $user_id = get_desk_author_user($desk_id);
     // Автор действия не должен получать уведомления о каких-то изменениях;
     if ($user_id != $_SESSION['user_id'] && $user_id != '' && in_array($user_id, $not_event_users) == false) {
         send_notification($user_id, 'В заявке №' . $desk_id . ' произошли новые события<br>Нажмите для перехода в список заявок.', 'service_desk', '', '1', $desk_id);
         $systems->send_telegram($user_id, $event_text);
         $not_event_users[] = $user_id;
     }
     return $not_event_users;
 }