Skip to content
Snippets Groups Projects
rating.js 10.2 KiB
Newer Older
var $ = jQuery;
Антон Шалимов's avatar
Антон Шалимов committed
$(function() {
Антон Шалимов's avatar
Антон Шалимов committed
    var g_isFocusCell = false; // Стоит фокус или нет
    var g_oldRateCell = null;
    var g_submoduleID = null;
    var g_studentID = null;
    var g_submoduleTitle = "";
    var g_submoduleMaxRate = 0;
Антон Шалимов's avatar
Антон Шалимов committed
    var g_stdName = "";
    var jTdInfo_wrap = $("#tdInfo_wrap");
    var jTdInfo = jTdInfo_wrap.children('#tdInfo');
    var g_URL = (window.location.href).split("/");
    var g_disciplineID = g_URL[g_URL.length - 1];
PavelBegunkov's avatar
PavelBegunkov committed

    // studyGroupID для фильтра
    var json_settings = $.parseJSON($("#hidden_div").html());
    $("#hidden_div").remove();
    filterGroups(json_settings.studyGroupID);
    $(".groupSelector [value='"+ json_settings.studyGroupID +"']").attr("selected", "selected");

PavelBegunkov's avatar
PavelBegunkov committed
    // Скрываем все остальные группы
    // 0 - показать все
    function filterGroups(groupID) {
        if (groupID == 0) {
            $(".studentsRate tbody")
            .children()
            .each( function() {
                    $(this).show();
            });
        } else {
            $(".studentsRate tbody")
                .children(":gt(2)")
                .each( function() {
                    if ($(this).hasClass(groupID))
                        $(this).show();
                    else
                        $(this).hide();
                });
        }
    }

Антон Шалимов's avatar
Антон Шалимов committed
    // Ставим подстветку
Антон Шалимов's avatar
Антон Шалимов committed
    function TdFocus(jThis){
        g_col = parseInt(jThis.attr('id'));
        g_row = parseInt(jThis.parent('tr').attr('id'));
Антон Шалимов's avatar
Антон Шалимов committed
        g_oldRateCell = jThis.children("input").val();
Антон Шалимов's avatar
Антон Шалимов committed
        $(".RatingTableSubmodulesHeadMaxRate .col_" + g_col).css("background-color", "#f1f1f1");
Антон Шалимов's avatar
Антон Шалимов committed
        $("td#" + g_col + ".rateCell").each(function(){
            $(this).children('input').css("background-color", "#f1f1f1");
Антон Шалимов's avatar
Антон Шалимов committed
        });
Антон Шалимов's avatar
Антон Шалимов committed
        $("tr#" + g_row + " .rateCell").each(function(){
            $(this).children('input').css("background-color", "#f1f1f1");
Антон Шалимов's avatar
Антон Шалимов committed
        });
        $("tr#" + g_row + " .staticCell").each(function(){
            $(this).css("background-color", "#f1f1f1");
        });
        jThis.children('input').css("background-color", "#fff");
Антон Шалимов's avatar
Антон Шалимов committed
    }
    
    // Убираем подстветку
    function TdUnFocus(){
        $(".RatingTableSubmodulesHeadMaxRate .col_" + g_col).css("background-color", "#fff");
Антон Шалимов's avatar
Антон Шалимов committed
        $("td#" + g_col + ".rateCell").each(function(){
            $(this).children('input').css("background-color", "#fff");
Антон Шалимов's avatar
Антон Шалимов committed
        });
Антон Шалимов's avatar
Антон Шалимов committed
        $("tr#" + g_row + " .rateCell").each(function(){
            $(this).children('input').css("background-color", "#fff");
Антон Шалимов's avatar
Антон Шалимов committed
        });
        $("tr#" + g_row + " .staticCell").each(function(){
            $(this).css("background-color", "#fff");
        });
Антон Шалимов's avatar
Антон Шалимов committed
    }
    
Антон Шалимов's avatar
Антон Шалимов committed
    function TdInfo(jThis) {
Антон Шалимов's avatar
Антон Шалимов committed
        // Получаем подмодуль
Антон Шалимов's avatar
Антон Шалимов committed
        g_submoduleID = parseInt($(".RatingTableSubmodulesHeadMaxRate .col_"+g_col+":first").attr("id"));
        g_submoduleTitle = $(".RatingTableSubmodulesHead .col_"+g_col+":first").text();
        if ($(".RatingTableSubmodulesHead .col_"+g_col+":first").length < 1 && $(".RatingTableModulesHead .bonus").length > 0 ) 
            g_submoduleTitle = 'Бонусные баллы';
        g_submoduleMaxRate = parseInt($(".RatingTableSubmodulesHeadMaxRate #"+g_submoduleID).children("input").val());
Антон Шалимов's avatar
Антон Шалимов committed
        // Получаем студента
Антон Шалимов's avatar
Антон Шалимов committed
        g_studentID = parseInt(jThis.siblings('.student').attr("id"));
        g_stdName = jThis.siblings('.student').text();
        jTdInfo_wrap.show();
        jTdInfo.children("#student").children("b").html(g_stdName);
        jTdInfo.children("#submodule").children("b").html(g_submoduleTitle);
        jTdInfo.children("#maxRate").children("b").html(g_submoduleMaxRate);

        //if (jThis.children('.tdInfo').length <= 0)
        //  jThis.append("<div class='tdInfo'>"+g_submoduleTitle+"<br>"+g_stdName+"</div>");
Антон Шалимов's avatar
Антон Шалимов committed
    }
Антон Шалимов's avatar
Антон Шалимов committed
    function UnsetTdInfo(jThis){
        //jThis.children(".tdInfo").remove();
        jTdInfo_wrap.hide();
Антон Шалимов's avatar
Антон Шалимов committed
        g_submoduleID = null;
        g_studentID = null;
        g_submoduleMaxRate = 0;
Антон Шалимов's avatar
Антон Шалимов committed
    }
Антон Шалимов's avatar
Антон Шалимов committed
    function Rating(jThis, oldRate) {
Антон Шалимов's avatar
Антон Шалимов committed
        oldRate = parseInt(oldRate);
Антон Шалимов's avatar
Антон Шалимов committed
        // Здесь jThis - div rateCell, а не input, который является дочкой
        jThis.children("input").attr("disabled", true);
Антон Шалимов's avatar
Антон Шалимов committed
        var newRate = 0;
Антон Шалимов's avatar
Антон Шалимов committed
        if (jThis.children("input").val() !== "")
            newRate = parseInt(jThis.children("input").val());
        //var maxRate = parseInt($(".RatingTableSubmodulesHeadMaxRate #"+g_submoduleID).children("input").val());
        var rateResult = parseInt(jThis.siblings(".RateResult").text()) - oldRate + newRate;
        if (rateResult > 100) {
            jThis.children("input").val(oldRate);
            EventInspector_ShowMsg("Сумма баллов не может привышать 100", "error");
            jThis.children("input").removeAttr("disabled");
Антон Шалимов's avatar
Антон Шалимов committed
        {
                $.ajax({
                    type: "POST",
                    url: URLdir + "handler/rating/setRate",
                    data: "student="+g_studentID+"&submodule="+g_submoduleID+"&rate="+newRate,
                    statusCode: {
                       403: function() { 
                            EventInspector_ShowMsg("Сессия истекла", "error");
                            jThis.children("input").val(oldRate);
                            jThis.children("input").removeAttr("disabled");
			                window.location.replace(URLdir);
                       200: function(data) {
                            data = $.parseJSON(data);
                            if(data.success === true) {
                                jThis.siblings(".RateResult").text(rateResult);
                                EventInspector_ShowMsg("Балл добавлен/изменен", "success");
                            }
                            else EventInspector_ShowMsg("Не удалось добавить/изменить балл", "error");
                            jThis.children("input").removeAttr("disabled");
                       }
Антон Шалимов's avatar
Антон Шалимов committed
                    }
            } 
            else {
                if (oldRate <= g_submoduleMaxRate)
                    jThis.children("input").val(oldRate);
                else
                    jThis.children("input").val("0");
                EventInspector_ShowMsg("Текущий балл превышает максимальный для данного модуля", "error");
                jThis.children("input").removeAttr("disabled");
            }
Антон Шалимов's avatar
Антон Шалимов committed
        }
    }
    
    $(".rateCell").mouseenter(function(){
        if (g_isFocusCell === false)
Антон Шалимов's avatar
Антон Шалимов committed
            TdFocus($(this));
Антон Шалимов's avatar
Антон Шалимов committed
    });
    
    $(".rateCell").mouseleave(function(){
        if (g_isFocusCell === false)
Антон Шалимов's avatar
Антон Шалимов committed
    });
    
    var oldRate = 0;
    $(".rateCell").focusin(function(){
        g_isFocusCell = true;
Антон Шалимов's avatar
Антон Шалимов committed
        TdFocus($(this));
PavelBegunkov's avatar
PavelBegunkov committed
        TdInfo($(this));
Антон Шалимов's avatar
Антон Шалимов committed
        if ($(this).children("input").val() !== "")
            oldRate = $(this).children("input").val();
        else oldRate = 0;
    });
    
    $(".rateCell").focusout(function(){
        g_isFocusCell = false;
        var newRate = 0;
        if ($(this).children("input").val() !== "")
            newRate = $(this).children("input").val();
        if (newRate != oldRate)
            Rating($(this), oldRate);
Антон Шалимов's avatar
Антон Шалимов committed
        UnsetTdInfo($(this));
    });
    
    $(".rateCell").keyup(function(e){
        
Антон Шалимов's avatar
Антон Шалимов committed
        var jThis = $(this);
Антон Шалимов's avatar
Антон Шалимов committed
        var row = g_row;
Антон Шалимов's avatar
Антон Шалимов committed
        var col = g_col;
Антон Шалимов's avatar
Антон Шалимов committed
        // При нажатие Enter (переход к оцениванию след. студента, т.е. ниже)
        if(e.keyCode==13)
Антон Шалимов's avatar
Антон Шалимов committed
            row = row + 1;
Антон Шалимов's avatar
Антон Шалимов committed
        // Стрелка вверх
        if(e.keyCode==38)
Антон Шалимов's avatar
Антон Шалимов committed
            row = row - 1;
Антон Шалимов's avatar
Антон Шалимов committed
        
        // Стрелка вправо
        if(e.keyCode==39)
Антон Шалимов's avatar
Антон Шалимов committed
            col = col + 1;
Антон Шалимов's avatar
Антон Шалимов committed
        
        // Стрелка вниз
        if(e.keyCode==40)
Антон Шалимов's avatar
Антон Шалимов committed
            row = row + 1;
Антон Шалимов's avatar
Антон Шалимов committed
        
        // Стрелка влево
        if(e.keyCode==37)
Антон Шалимов's avatar
Антон Шалимов committed
            col = col - 1;

Антон Шалимов's avatar
Антон Шалимов committed
        if ((e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 ) {
            var jTempObj = $("tr#" + row + " td#" + col + ".rateCell");
            if (jTempObj.length > 0) {
                TdUnFocus();
                g_row = row;
                g_col = col;
                jTempObj.children("input").focus();
            }
        }
Антон Шалимов's avatar
Антон Шалимов committed
    });
    
    $(".rateCell input").focusin(function(){
        $(this).select();
    });
    
    // При нажатие на элемент rateCell дочерный input получает фокус
    $(".rateCell ").click(function(){
        $(this).children("input").focus();
    } );
    
    // В inputCredit (где баллы вводить) разрешаем вводить только цифры
    $(".rateCell").children("input").keydown(function(event) {
        KeyDownOnlyNumber(event);
    // Фильтр по группе
PavelBegunkov's avatar
PavelBegunkov committed
    $(".groupSelector").change(function() {
        var val = parseInt($(this).val()); // StudyGroupID
PavelBegunkov's avatar
PavelBegunkov committed
        if (val >= 0)
PavelBegunkov's avatar
PavelBegunkov committed
            filterGroups(val);
            $.post(
                URLdir + "handler/rating/SelectGroup",
                {   
                    "disciplineID": g_disciplineID,
                    "groupSelected":  val 
                },
                function(data){
                    data = $.parseJSON(data);
                    if(data.success === true) {

                    }
                }
            );
        }


    $(".downloadExcel").click(function(){
        $.fileDownload(URLdir + 'handler/rating/GetExcelRateTable', {
            httpMethod: "POST",
            data: 
            {
                'disciplineID': g_disciplineID
            },
            successCallback: function (url) {
                // $('#downloadStudentPDF').removeAttr('disabled');
            }
           // failCallback: function (html, url) {
           //      $('#downloadStudentPDF').removeAttr('disabled');
           //      alert(html);
           // }
        });
    });

Антон Шалимов's avatar
Антон Шалимов committed