Skip to content
Snippets Groups Projects
editTeachers.js 7.73 KiB
Newer Older
Антон Шалимов's avatar
fff
Антон Шалимов committed
var $ = jQuery;
$(function() {
PavelBegunkov's avatar
PavelBegunkov committed
        var jDepartmentSelect = $("select.SelectDepartment");
        var jNameFilterInput = $("input.InputTeacherName");
        var jFacultySelect = $("select.SelectFaculty");

        var teacherPrototype = $($.parseHTML(
                                    "<div class='Teacher' id='0'>\
                                        <div class='Name'></div>\
                                        <button class='Action'></button>\
                                        <button class='Action_ChangeOwner'>Передать дисциплину</button>\
                                    </div>"
                                ));

    // Добавить преподавателя
    function AddTeacher(ID, name, action){
        var cell = teacherPrototype.clone();
        cell.prop("id", ID);
        cell.find("div.Name").html(name);
        var temp = cell.find("button.Action");
        temp.addClass("Action_"+action+"Teacher");

        if (action == "Unbind") 
            temp.html("Отсоединить");
        else if (action == "Bind")
            temp.html("Присоединить");

        cell.find("button.Action_ChangeOwner").addClass("Action");
        return cell;
    }


    // Поиск преподавателей
    function CallSearchTeachers(){
        /*
            It is a bad idea to make an ajax request every time, you want to refresh list.
            The better solution: use list.js extension, and load the whole list with the first page load.
         */
        var source = jNameFilterInput.val();
        var name = source.split(" ");
PavelBegunkov's avatar
PavelBegunkov committed
        $.post(
Korvin's avatar
Korvin committed
            g_URLdir + "handler/map/SearchTeachers",
PavelBegunkov's avatar
PavelBegunkov committed
            {
                "FacultyID": jFacultySelect.val(),
                "DepartmentID": jDepartmentSelect.val(),
                "Last": name[0],
                "First": name[1],
                "Second": name[2],
                "DisciplineID": g_disciplineID
            },
            function(data) {
                var jSearchResult = $('.SearchResult');
                var teachers = $.parseJSON(data);

                if (teachers.length) {
                    jSearchResult.html('');
                    for (var i in teachers) {
                        var t = teachers[i];
                        var name = t.LastName + ' ' + t.FirstName + ' ' + t.SecondName;
                        jSearchResult.append(AddTeacher(t.ID, name, 'Bind'));
PavelBegunkov's avatar
PavelBegunkov committed
                    }
                } else {
                    jSearchResult.html('<p class="notification">Нет результатов... Возможно, преподаватели, соответствующие критериям поиска, уже прикреплены.</p>');
PavelBegunkov's avatar
PavelBegunkov committed
                }
            }
        );
    }

    // Выборка факультета
    jFacultySelect.change(function(){
        if ($(this).val() ===  '0') {
            jDepartmentSelect.html("<option value='0'>Нет кафедр</option>");
        } else {
            jDepartmentSelect.prop("disabled",true);
            jNameFilterInput.prop("disabled",true);
            $.post(
                g_URLdir + "handler/map/GetDepartments",
                {
                    "FacultyID": $(this).val()
                },
                function (Dep) {
                    var Dep = $.parseJSON(Dep);
                    var i = 0;
                    if (Dep != null && Dep != undefined) {

                        jDepartmentSelect.html("<option value='0'>Выберите кафедру (не обязательно)</option>");
                        for (i in Dep) {
                            var dep = Dep[i];
                            if (!dep.Name) dep.Name = 'Служебная кафедра';
                            jDepartmentSelect.append("<option value='" + dep.ID + "'>" + dep.Name + "</option>");
                        }
                        if (i <= 0)
                            jDepartmentSelect.html("<option value='0'>Нет кафедр</option>");
PavelBegunkov's avatar
PavelBegunkov committed
                    }
                    jDepartmentSelect.removeAttr("disabled");
                    jNameFilterInput.removeAttr("disabled");
PavelBegunkov's avatar
PavelBegunkov committed
                }
PavelBegunkov's avatar
PavelBegunkov committed
    });

PavelBegunkov's avatar
PavelBegunkov committed
    // jDepartmentSelect.change(function(){
    //     CallSearchTeachers();
    // });
    // jNameFilterInput.focusout(function(){
    //     CallSearchTeachers();
    // });
    // jNameFilterInput.keydown(function(e){
    //     if(e.keyCode==13){
    //         $(this).focusout("focusout");
    //         $(this).blur();
    //     }
    // });

    var typewatch = (function() {
        var timer = 0;
        return function(callback, ms) {
            clearTimeout(timer);
            timer = setTimeout(callback, ms);
        };
    })();
PavelBegunkov's avatar
PavelBegunkov committed

    var updateList = function(e) {
        typewatch(function() {
PavelBegunkov's avatar
PavelBegunkov committed
            CallSearchTeachers();
PavelBegunkov's avatar
PavelBegunkov committed
            $(this).blur();
        }, 700);
    };

    $(".searchBtn").click(updateList);

    $(".InputTeacherName")
        .keyup(updateList)
        .bind("paste", updateList);
PavelBegunkov's avatar
PavelBegunkov committed


    // Конец поиска преподавателей

    // Передать дисциплину
    $(".TeachersList").on("click", "button.Action_ChangeOwner", function(){

        if (confirm("Вы действительно хотите передать дисциплину?")) {
            var jThis = $(this);
            $(this).attr("disabled", true);
            $.post(
Korvin's avatar
Korvin committed
                g_URLdir + "handler/discipline/delegate",
PavelBegunkov's avatar
PavelBegunkov committed
                {
                    'id': g_disciplineID,
                    "teacherID": parseInt(jThis.parent().attr("id"))
PavelBegunkov's avatar
PavelBegunkov committed
                },
                function(data)
                {
                    data = $.parseJSON(data);
                    if (data.response) {
PavelBegunkov's avatar
PavelBegunkov committed
                        jThis.removeAttr("disabled");
xamgore's avatar
xamgore committed
                        EventInspector.error("Ошибка при передаче дисциплины");
                    } else {
                        setTimeout("location.replace('"+g_URLdir+"')", 100); 
PavelBegunkov's avatar
PavelBegunkov committed
                    }
                }
            );
        }

    });

    // Отсоединить преподавателя
    $(".TeachersList").on("click", "button.Action_UnbindTeacher", function(){
        var jThis = $(this);
        $(this).attr("disabled", true);
        var ID = $(this).parent().attr("id");
        $.post(
Korvin's avatar
Korvin committed
            g_URLdir + "handler/discipline/unbind",
PavelBegunkov's avatar
PavelBegunkov committed
            {
                'id': g_disciplineID,
PavelBegunkov's avatar
PavelBegunkov committed
            },
            function(data){
                data = $.parseJSON(data);
                if(data.error) {
xamgore's avatar
xamgore committed
                    EventInspector.error("Ошибка при отсоединении преподавателя");
PavelBegunkov's avatar
PavelBegunkov committed
                    jThis.removeAttr("disabled");
                } else {
                    jThis.parent().remove();
PavelBegunkov's avatar
PavelBegunkov committed
                }
            }
        );
    });

    // Присоединить преподавателя
    $(".TeachersList").on("click", "button.Action_BindTeacher", function(){
        var jThis = $(this);
        $(this).attr("disabled", true);
        var ID = $(this).parent().attr("id");
        var Name = $(this).siblings(".Name").text();
        $.post(
Korvin's avatar
Korvin committed
            g_URLdir + "handler/discipline/bind",
PavelBegunkov's avatar
PavelBegunkov committed
            {
                'id': g_disciplineID,
PavelBegunkov's avatar
PavelBegunkov committed
            },
            function(data){
                data = $.parseJSON(data);
                if (data.error) {
xamgore's avatar
xamgore committed
                    EventInspector.error("Ошибка при прикреплении преподавателя");
PavelBegunkov's avatar
PavelBegunkov committed
                    jThis.removeAttr("disabled");
                } else {
                    $(".BindTeachersList").append(AddTeacher(ID, Name, "Unbind"));
                    jThis.parent().remove();
PavelBegunkov's avatar
PavelBegunkov committed
                }
            }
        );
    });
Антон Шалимов's avatar
fff
Антон Шалимов committed

xamgore's avatar
xamgore committed
});