var $ = jQuery; $(function() { var URL = (window.location.href).split('/'); var DisciplineID = URL[URL.length - 1] // Шаблон мероприятия function GetSubModuleTmp(){ return '\ <div class="subModule">\ <div class="name">\ <input type="text" class="inputName SubmoduleName" value="Наименование мероприятия">\ </div>\ <div class="currentControl"><input type="text" class="inputCredit inputCurrentControl" value="0"></div>\ <div class="landmarkControl"><input type="text" class="inputCredit inputLandmarkControl" value="0"></div>\ <div class="actions">\ <div class="deleteSubModule icon delete"></div>\ <div class="downSubModule icon down"></div>\ <div class="upSubModule icon up"></div>\ </div>\ </div>\ '; } // Шаблон модуля function GetModuleTmp() { return '\ <div class="moduleGroup">\ <div class="moduleHead">\ <div class="name">\ <input type="text" class="inputName ModuleName" value="Наименование модуля">\ </div>\ <div class="currentControl">0</div>\ <div class="landmarkControl">0</div>\ <div class="actions">\ <div class="deleteModule icon delete"></div>\ <div class="downModule icon down"></div>\ <div class="upModule icon up"></div>\ <div class="addSubModule icon add"></div>\ </div>\ </div>\ <div class="subModules">\ '+GetSubModuleTmp()+'\ </div>\ </div>' }; // Подсчет текущего контроля function CountCurrentControl(subModulesDiv){ var maxCredits = 0; $('.inputCurrentControl', subModulesDiv).each(function(){ var credit = parseInt($(this).val()); maxCredits = maxCredits + ((isNum(credit)) ? credit : 0); }); subModulesDiv.prev().children('.currentControl').text(maxCredits); } // Подсчет рубежного контроля function CountLandmarkControl(subModulesDiv){ var maxCredits = 0; $('.inputLandmarkControl', subModulesDiv).each(function(){ var credit = parseInt($(this).val()); maxCredits = maxCredits + ((isNum(credit)) ? credit : 0); }); subModulesDiv.prev().children('.landmarkControl').text(maxCredits); } // Изменение типа подмодуля function ChangeSubmoduleControlType(ID, ControlType){ $.post( '/~dev_rating/handler/map/ChangeSubmoduleControlType', { 'SubmoduleID': ID, 'ControlType': ControlType }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, ChangeSubmodule ControlType', 'success'); else EventInspector_ShowMsg('Error, ChangeSubmodule ControlType', 'error'); } ); } // Изменение макс. балла подмодуля function ChangeSubmoduleMaxRate(ID, NewMaxRate) { $.post( '/~dev_rating/handler/map/ChangeSubmoduleMaxRate', { 'SubmoduleID': ID, 'MaxRate': NewMaxRate }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, ChangeSubmodule MaxRate', 'success'); else EventInspector_ShowMsg('Error, ChangeSubmodule MaxRate', 'error'); } ); } // Установить новый max балл function SetNewRateAndControl(thisObj, OldMaxRate) { // DIV с мероприятиями для данного модуля var subModulesDiv = thisObj.parent().parent().parent(); // ID мероприятия var ID = thisObj.parent('div').parent('div').attr('id'); var NewMaxRate = 0; if (thisObj.val() != '') NewMaxRate = thisObj.val(); // Меняем max балл if (NewMaxRate != OldMaxRate) ChangeSubmoduleMaxRate(ID, NewMaxRate); // Меняем тип ControlType = 'CurrentControl'; // По-умолчанию if ((thisObj.parent().attr('class')).indexOf('landmarkControl') + 1 > 0) ControlType = 'LandmarkControl'; if (NewMaxRate > 0) ChangeSubmoduleControlType(ID, ControlType); if (ControlType == 'CurrentControl') thisObj.parent().parent().find('.landmarkControl').children('.inputLandmarkControl').val('0'); if (ControlType == 'LandmarkControl') thisObj.parent().parent().find('.currentControl').children('.inputCurrentControl').val('0'); // Подсчет текущего и рубежного контроля после изменений CountCurrentControl(subModulesDiv); CountLandmarkControl(subModulesDiv); } // Поменять местами два модуля function SwapModuleOrder(ModuleID1, ModuleID2) { $.post( '/~dev_rating/handler/map/SwapModuleOrder', { 'ModuleID1': ModuleID1, 'ModuleID2': ModuleID2 }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, SwapModuleOrder', 'success'); else EventInspector_ShowMsg('Error, SwapModuleOrder', 'error'); } ); } // Поменять местами два мероприятия function SwapSubmoduleOrder(SubmoduleID1, SubmoduleID2) { $.post( '/~dev_rating/handler/map/SwapSubmoduleOrder', { 'SubmoduleID1': SubmoduleID1, 'SubmoduleID2': SubmoduleID2 }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, SwapSubmoduleOrder', 'success'); else EventInspector_ShowMsg('Error, SwapSubmoduleOrder', 'error'); } ); } //------------------------------------------------------------------------------------------------------------------------------------------------- // Изменения базовых параметров дисциплины $(".ChangeDiscipline").click(function(){ $.post( '/~dev_rating/handler/map/ChangeDiscipline', { 'DisciplineID': DisciplineID, 'Grade': $('.SelectGrade').val(), 'SubjectID': $('.SelectSubject').val(), 'ExamType': $('input:radio[name=ExamType]:checked').val(), 'LectionCount': $('.InputLectionCount').val(), 'PracticeCount': $('.InputPracticeCount').val(), 'DepartmentID': $('.SelectDepartment').val() }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, ChangeDiscipline', 'success'); else EventInspector_ShowMsg('Error, ChangeDiscipline', 'error'); } ); return false }); // Переместить вверх МОДУЛЬ $(".moduleList").on('click', '.upModule', function(){ var parentDIV = $(this).parent('div').parent('div').parent('div'); parentDIV.insertBefore(parentDIV.prev()); var ModuleID = parentDIV.attr('id'); // Для того, который СТАЛ находится ниже var nextModuleID = parentDIV.next('div').attr('id'); SwapModuleOrder(ModuleID, nextModuleID); return false }); // Переместить вниз МОДУЛЬ $(".moduleList").on('click', '.downModule', function(){ var parentDIV = $(this).parent('div').parent('div').parent('div'); parentDIV.insertAfter(parentDIV.next()); var ModuleID = parentDIV.attr('id'); // Для того, который СТАЛ находится выше var prevModuleID = parentDIV.prev('div').attr('id'); SwapModuleOrder(ModuleID, prevModuleID); return false }); // Переместить вверх мероприятие $(".moduleList").on('click', '.upSubModule', function(){ var parentDIV = $(this).parent('div').parent('div'); parentDIV.insertBefore(parentDIV.prev()); var SubmoduleID = parentDIV.attr('id'); var nextSubmoduleID = parentDIV.next('div').attr('id'); SwapSubmoduleOrder(SubmoduleID, nextSubmoduleID); return false }); // Переместить вниз мероприятие $(".moduleList").on('click', '.downSubModule', function(){ var parentDIV = $(this).parent('div').parent('div'); parentDIV.insertAfter(parentDIV.next()); var SubmoduleID = parentDIV.attr('id'); var prevSubmoduleID = parentDIV.prev('div').attr('id'); SwapSubmoduleOrder(SubmoduleID, prevSubmoduleID); return false }); // Добавить модуль $('.addModule').click(function(){ $('.moduleList').append(GetModuleTmp()); var OrderNum = $('.moduleGroup', '.moduleList').last().index('.moduleGroup') + 1; $.post( '/~dev_rating/handler/map/AddModule', { 'DisciplineID': DisciplineID, 'OrderNum': OrderNum }, function(data){ data = $.parseJSON(data); if(data.success === true) { // К добавленному модулю добавляем ID var thisModuleDIV = $('.moduleGroup').eq(OrderNum - 1); thisModuleDIV.attr('id', data.ModuleID); // К добавленному в модуль мероприятию добавляем ID thisModuleDIV.children('.subModules').children('.subModule').eq(0).attr('id', data.SubmoduleID); EventInspector_ShowMsg('Ок, AddModule', 'success'); } else EventInspector_ShowMsg('Error, AddModule', 'error'); } ); if ($('.empty').css('display') == 'block') $('.empty').css('display', 'none'); }); // Добавить мероприятие $('.moduleList').on('click', '.addSubModule', function(){ $(this).parent().parent().next().append(GetSubModuleTmp()); var ModuleID = $(this).parent('div').parent('div').parent('div').attr('id'); var SubmodulesDIV = $(this).parent().parent().next('.subModules'); var OrderNum = SubmodulesDIV.children('.subModule').last().index() + 1; $.post( '/~dev_rating/handler/map/AddSubmodule', { 'ModuleID': ModuleID, 'OrderNum': OrderNum }, function(data){ data = $.parseJSON(data); if(data.success === true) { // К добавленному мероприятию добавляем ID SubmodulesDIV.children('.subModule').eq(OrderNum - 1).attr('id', data.SubmoduleID); EventInspector_ShowMsg('Ок, AddSubmodule', 'success'); } else EventInspector_ShowMsg('Error, AddSubmodule', 'error'); } ); }); // Удалить модуль $('.moduleList').on('click', '.deleteModule', function(){ $(this).parent().css('display', 'none'); $(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteModule">Да</span> <span class="cancel">Нет</span></div>'); }); // Подтверждение при удаление модуля $('.moduleList').on('click', '.confirmDeleteModule', function(){ var subModulesDIV = $(this).parent('div').parent('div').next('.subModules'); var CurrentModuleOrder = $(this).parent().parent().parent().index() + 1; // Собираем в JSON строку ID мероприятий var JSONSubmodules = '['; $('.subModule', subModulesDIV).each(function(){ JSONSubmodules += $(this).attr('id') + ','; }); JSONSubmodules = JSONSubmodules.substr(0, JSONSubmodules.length - 1); JSONSubmodules += ']'; // // Собираем ID модулей, которые ниже для того, чтоб сменить их порадок на +1 var AttrID = $(this).parent().parent().parent().nextAll().map(function(indx, element){ return $(element).attr("id"); }); var ChangeOrderModulesID = '[' + AttrID.get() + ']'; // $.post( '/~dev_rating/handler/map/DeleteModule', { 'ModuleID': $(this).parent('div').parent('div').parent('div').attr('id'), 'SubmodulesID': JSONSubmodules, 'CurrentModuleOrder': CurrentModuleOrder, 'ChangeOrderModulesID': ChangeOrderModulesID }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, DeleteModule', 'success'); else EventInspector_ShowMsg('Error, DeleteModule', 'error'); } ); $(this).parent('div').parent('div').parent('div').remove(); }); // Удалить мероприятие $('.moduleList').on('click', '.deleteSubModule ', function(){ $(this).parent().css('display', 'none'); $(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteSubModule">Да</span> <span class="cancel">Нет</span></div>'); }); // Подтверждение при удаление мероприятия $('.moduleList').on('click', '.confirmDeleteSubModule ', function(){ var subModulesDiv = $(this).parent().parent().parent(); var CurrentSubmoduleOrder = $(this).parent().parent().index() + 1; CountCurrentControl(subModulesDiv); CountLandmarkControl(subModulesDiv); // Собираем ID мероприятий, которые ниже для того, чтоб сменить их порадок на +1 var AttrID = $(this).parent().parent().nextAll().map(function(indx, element){ return $(element).attr("id"); }); var ChangeOrderSubmodulesID = '[' + AttrID.get() + ']'; // $.post( '/~dev_rating/handler/map/DeleteSubmodule', { 'SubmoduleID': $(this).parent('div').parent('div').attr('id'), 'CurrentSubmoduleOrder': CurrentSubmoduleOrder, 'ChangeOrderSubmodulesID': ChangeOrderSubmodulesID }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, DeleteSubmodule', 'success'); else EventInspector_ShowMsg('Error, DeleteSubmodule', 'error'); } ); $(this).parent('div').parent('div').remove(); }); // Отмена удаления модулей/мероприятий $('.moduleList').on('click', '.cancel ', function(){ $(this).parent().parent().children('.actions').css('display', 'block'); $(this).parent().remove(); }); // Поменять название модуля var ModuleName; $('.moduleList').on('focusin', '.ModuleName', function(){ ModuleName = $(this).val(); }); $('.moduleList').on('focusout', '.ModuleName', function(){ var NewModuleName = $(this).val(); if (NewModuleName != '' && ModuleName != NewModuleName) { var ID = $(this).parent('div').parent('div').parent('div').attr('id'); $.post( '/~dev_rating/handler/map/ChangeModuleName', { 'ModuleID': ID, 'ModuleName': NewModuleName }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, Change Module Name', 'success'); else EventInspector_ShowMsg('Error, Change Module Name', 'error'); } ); } }); // Поменять название мероприятие var SubmoduleName; $('.moduleList').on('focusin', '.SubmoduleName', function(){ SubmoduleName = $(this).val(); }); $('.moduleList').on('focusout', '.SubmoduleName', function(){ var NewSubmoduleName = $(this).val(); if (NewSubmoduleName != '' && SubmoduleName != NewSubmoduleName) { var ID = $(this).parent('div').parent('div').attr('id'); $.post( '/~dev_rating/handler/map/ChangeSubmoduleName', { 'SubmoduleID': ID, 'SubmoduleName': NewSubmoduleName }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Ок, Change Submodule Name', 'success'); else EventInspector_ShowMsg('Error, Change Submodule Name', 'error'); } ); } }); // При записи в input текущий контроль // При фокусе var OldMaxRate = 0; $('.moduleList').on('focusin', '.inputCurrentControl', function(){ OldMaxRate = $(this).val(); }); // При потери фокуса $('.moduleList').on('focusout', '.inputCurrentControl', function(){ SetNewRateAndControl($(this), OldMaxRate); }); // При записи в input рубежный контроль // При фокусе var OldMaxRate = 0; $('.moduleList').on('focusin', '.inputLandmarkControl', function(){ OldMaxRate = $(this).val(); }); // При потери фокуса $('.moduleList').on('focusout', '.inputLandmarkControl', function(){ SetNewRateAndControl($(this), OldMaxRate); }); // В inputCredit (где баллы вводить) разрешаем вводить только цифры $(".moduleList").on('keydown', '.inputCredit', function(event) { KeyDownOnlyNumber(event); }); });