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="" placeholder="Наименование мероприятия">\ </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="" placeholder="Наименование модуля">\ </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>\ </div>\ <div class="subModules">\ '+GetSubModuleTmp()+'\ </div>\ <div class="addSubModule">Добавить мероприятие</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( URLdir + 'handler/map/ChangeSubmoduleControlType', { 'SubmoduleID': ID, 'ControlType': ControlType }, function(data){ data = $.parseJSON(data); //if(data.success === true) // EventInspector_ShowMsg('Форма контроля изменена', 'success'); //else EventInspector_ShowMsg('Ошибка при изменение формы контроля', 'error'); } ); } // Изменение макс. балла подмодуля function ChangeSubmoduleMaxRate(ID, NewMaxRate) { $.post( URLdir + 'handler/map/ChangeSubmoduleMaxRate', { 'SubmoduleID': ID, 'MaxRate': NewMaxRate }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Max балл мероприятия изменен', 'success'); else EventInspector_ShowMsg('Ошибка при изменение max балла', '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 = parseInt(thisObj.val()); // Ограничение 100 баллов var MaxSumRate = 100; if ($('div').is('.ExamModule')) MaxSumRate = 60; var currentControl = 0; $('.moduleHead .currentControl').each(function(){ currentControl += parseInt($(this).text()); }); var landmarkControl = 0; $('.moduleHead .landmarkControl').each(function(){ landmarkControl += parseInt($(this).text()); }); var subtract = 0; if (thisObj.parent().attr('class').indexOf('landmarkControl') + 1 > 0) subtract = parseInt(thisObj.parent().siblings('.currentControl').children().val()); if (thisObj.parent().attr('class').indexOf('currentControl') + 1 > 0) subtract = parseInt(thisObj.parent().siblings('.landmarkControl').children().val()); if (currentControl + landmarkControl + NewMaxRate - subtract - OldMaxRate > MaxSumRate) { if (NewMaxRate == 0) thisObj.val('0'); else { EventInspector_ShowMsg('Сумма баллов превышает максимум', 'error'); thisObj.val(OldMaxRate); return 0; } } // Меняем max балл if (NewMaxRate != OldMaxRate) { ChangeSubmoduleMaxRate(ID, NewMaxRate); // Счетчик баллов var RateIndicarot = currentControl + landmarkControl + NewMaxRate - subtract - OldMaxRate; if ($('div').is('.ExamModule')) RateIndicarot += 40; $('.RateIndicatorDIV .RateIndicator').html(RateIndicarot); if ($('div').is('.BonusModule')) $('.RateIndicatorDIV .RateIndicator').append(' + 10 бонусных баллов'); // Меняем тип 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( URLdir + 'handler/map/SwapModuleOrder', { 'ModuleID1': ModuleID1, 'ModuleID2': ModuleID2 }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Модули поменяли порядок', 'success'); else EventInspector_ShowMsg('Ошибка при изменение порядка модулей', 'error'); } ); } // Поменять местами два мероприятия function SwapSubmoduleOrder(SubmoduleID1, SubmoduleID2) { $.post( URLdir + 'handler/map/SwapSubmoduleOrder', { 'SubmoduleID1': SubmoduleID1, 'SubmoduleID2': SubmoduleID2 }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Мероприятия поменяли порядок', 'success'); else EventInspector_ShowMsg('Ошибка при изменение порядка мероприятий', 'error'); } ); } //------------------------------------------------------------------------------------------------------------------------------------------------- // ---- Изменения базовых параметров дисциплины --- // Изменение предмета $('.SelectSubject').change(function(){ $.post( URLdir + 'handler/map/ChangeDisciplineSubject', { 'DisciplineID': DisciplineID, 'SubjectID': $('.SelectSubject').val() }, function(data) { data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Предмет изменен', 'success'); else EventInspector_ShowMsg('Ошибка: Изменение предмета', 'error'); } ); }); // Изменение курса $('.SelectDisGrade').change(function(){ // SelectGrade совпадает с другим, поэтому SelectDisGrade $.post( URLdir + 'handler/map/ChangeDisciplineGrade', { 'DisciplineID': DisciplineID, 'GradeID': $('.SelectDisGrade').val() }, function(data) { data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Курс изменен', 'success'); else EventInspector_ShowMsg('Ошибка: Изменение курса', 'error'); } ); }); // Бонусные баллы $('.BonusRate').change(function(){ $.post( URLdir + 'handler/map/ChangeStatusBonusModule', { 'DisciplineID': DisciplineID, 'BonusRate': $(".BonusRate").prop("checked") }, function(data) { data = $.parseJSON(data); if(data.success === true) { if (data.action == 'add') EventInspector_ShowMsg('Бонусные баллы добавлены', 'success'); if (data.action == 'delete') EventInspector_ShowMsg('Бонусные баллы удалены', 'success'); } else EventInspector_ShowMsg('Ошибка: Бонусные баллы', 'error'); } ); }); // Изменение контроля $('.ExamType').change(function(){ $.post( URLdir + 'handler/map/ChangeDisciplineControl', { 'DisciplineID': DisciplineID, 'Control': $('input:radio[name=ExamType]:checked').val() }, function(data) { data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Форма контроля изменена', 'success'); else EventInspector_ShowMsg('Ошибка: Изменение формы контроля', 'error'); } ); }); // Изменение лекционных часов $('.InputLectionCount').focusout(function(){ $.post( URLdir + 'handler/map/ChangeDisciplineHours', { 'DisciplineID': DisciplineID, 'Hours': $('.InputLectionCount').val(), 'Type': '1' }, function(data) { data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Лекционные часы изменен', 'success'); else EventInspector_ShowMsg('Ошибка: Изменение лекционных часов', 'error'); } ); }); // Изменение практических часов $('.InputPracticeCount').focusout(function(){ $.post( URLdir + 'handler/map/ChangeDisciplineHours', { 'DisciplineID': DisciplineID, 'Hours': $('.InputPracticeCount').val(), 'Type': '0' }, function(data) { data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Практические часы изменен', 'success'); else EventInspector_ShowMsg('Ошибка: Изменение практических часов', 'error'); } ); }); /* $(".ChangeDiscipline").click(function(){ $.post( URLdir + '/handler/map/ChangeDiscipline', { 'DisciplineID': DisciplineID, 'Grade': $('.SelectGrade').val(), 'SubjectID': $('.SelectSubject').val(), 'ExamType': $('input:radio[name=ExamType]:checked').val(), 'LectionCount': $('.InputLectionCount').val(), 'PracticeCount': $('.InputPracticeCount').val(), 'FacultyID': $('.SelectFaculty').val() }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Базовые настройки УКД изменены', 'success'); else EventInspector_ShowMsg('Ошибка: Базовые настройки УКД', 'error'); } ); return false }); */ // Переместить вверх МОДУЛЬ $(".moduleList").on('click', '.upModule', function(){ var parentDIV = $(this).parent('div').parent('div').parent('div'); parentDIV.insertBefore(parentDIV.prev('.moduleGroup')); 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'); if ($('div').is(parentDIV.next('.moduleGroup'))) { parentDIV.insertAfter(parentDIV.next('.moduleGroup')); 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'); if ($('div').is(parentDIV.next('.subModule'))) { parentDIV.insertAfter(parentDIV.next()); var SubmoduleID = parentDIV.attr('id'); var prevSubmoduleID = parentDIV.prev('div').attr('id'); SwapSubmoduleOrder(SubmoduleID, prevSubmoduleID); } return false }); // Добавить модуль $('.addModule').click(function(){ var OrderNum = $('.moduleGroup', '.moduleList').last().index('.moduleGroup') + 2; $.post( URLdir + 'handler/map/AddModule', { 'DisciplineID': DisciplineID, // 'OrderNum': OrderNum }, function(data){ data = $.parseJSON(data); if(data.success === true) { if ($('div').is('.ExamModule')) $('.ExamModule').before(GetModuleTmp()); else $('.moduleList').append(GetModuleTmp()); // К добавленному модулю добавляем 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('Модуль добавлен', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление модуля', '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( URLdir + '/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('Мероприятие добавлено', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление мероприятия', 'error'); } ); }); */ // Добавить мероприятие $('.moduleList').on('click', '.addSubModule', function(){ var ModuleID = $(this).parent('div').attr('id'); var SubmodulesDIV = $(this).siblings('.subModules'); var OrderNum = SubmodulesDIV.children('.subModule').last().index() + 2; $.post( URLdir + 'handler/map/AddSubmodule', { 'ModuleID': ModuleID //'OrderNum': OrderNum }, function(data){ data = $.parseJSON(data); if(data.success === true) { // К добавленному мероприятию добавляем ID SubmodulesDIV.append(GetSubModuleTmp()); SubmodulesDIV.children('.subModule').eq(OrderNum - 1).attr('id', data.SubmoduleID); EventInspector_ShowMsg('Мероприятие добавлено', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление мероприятия', '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 thisObj = $(this); 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( URLdir + '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) { thisObj.parent('div').parent('div').parent('div').remove(); EventInspector_ShowMsg('Модуль удален', 'success'); } else EventInspector_ShowMsg('Ошибка при удаление модуля', 'error'); } ); }); // Удалить мероприятие $('.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 thisObj = $(this); 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() + ']'; ChangeSubmoduleMaxRate($(this).parent('div').parent('div').attr('id'), 0); // $.post( URLdir + 'handler/map/DeleteSubmodule', { 'SubmoduleID': $(this).parent('div').parent('div').attr('id'), 'CurrentSubmoduleOrder': CurrentSubmoduleOrder, 'ChangeOrderSubmodulesID': ChangeOrderSubmodulesID }, function(data){ data = $.parseJSON(data); if(data.success === true) { var sub = thisObj.parent('div').parent('div'); var mod = sub.parent('div').parent('div').find('.moduleHead'); // get old submodule values var dif1 = sub.find('.currentControl').find('input').val(); var dif2 = sub.find('.landmarkControl').find('input').val(); // change module header var old = mod.find('.currentControl').html(); mod.children('.currentControl').html(old - dif1); old = mod.find('.landmarkControl').html(); mod.children('.landmarkControl').html(old - dif2); // change max rate old = $('.RateIndicator').html(); $('.RateIndicator').html(old - dif1 - dif2); thisObj.parent('div').parent('div').remove(); EventInspector_ShowMsg('Мероприятие удалено', 'success'); } else EventInspector_ShowMsg('Ошибка при удаление мероприятия', 'error'); } ); }); // Отмена удаления модулей/мероприятий $('.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( URLdir + 'handler/map/ChangeModuleName', { 'ModuleID': ID, 'ModuleName': NewModuleName }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Имя модуля изменено', 'success'); else EventInspector_ShowMsg('Ошибка при изменение имени модуля', 'error'); } ); } }); $('.moduleList').on('keydown', '.ModuleName', function(e){ if(e.keyCode==13){ $('.ModuleName').trigger('focusout'); } }); // Поменять название мероприятие 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( URLdir + 'handler/map/ChangeSubmoduleName', { 'SubmoduleID': ID, 'SubmoduleName': NewSubmoduleName }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Имя мероприятия изменено', 'success'); else EventInspector_ShowMsg('Ошибка при изменение имени мероприятия', 'error'); } ); } }); $('.moduleList').on('keydown', '.SubmoduleName', function(e){ if(e.keyCode==13){ $('.SubmoduleName').trigger('focusout'); } }); // При записи в 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); }); // ------ Прикрипление студентов/групп/преподавателей -- var FacultyID = $('.HiddenInputFacultyID').val(); // Факультет, к которой привязана дисциплина $('.HiddenInputFacultyID').remove(); // Тут даже Шерлок Холмс бессилен function BindGroup(id, StudyGroupName){ return '\ <div class="AttachedGroup" id="'+ id +'">\ <div class="StudyGroupInfo">'+ StudyGroupName +'</div>\ <div class="UnbindGroup">Отсоединить группу</div>\ </div>'; } // Прикрепить группу $('.AttachGroupButton').click(function(){ var StudyGroupID = $('.SelectStudyGroup').val(); var StudyGroupName = $(".SelectStudyGroup option:selected").text(); $.post( URLdir + 'handler/map/BindGroup', { 'StudyGroupID': StudyGroupID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) { $('.AttachedGroupsList').append(BindGroup(StudyGroupID, StudyGroupName)); EventInspector_ShowMsg('Группа добавлена', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление группы', 'error'); } ); }); // Отсоединить группу $('.AttachedGroupsList').on('click', '.UnbindGroup', function(){ var StudyGroupID = $(this).parent().attr('id'); var GroupDIV = $(this).parent(); $.post( URLdir + 'handler/map/UnbindGroup', { 'StudyGroupID': StudyGroupID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) { GroupDIV.remove(); EventInspector_ShowMsg('Группа отсоединена', 'success'); } else EventInspector_ShowMsg('Ошибка при отсоединение группы', 'error'); } ); }); // Поиск студентов function AddStudent(ID, Name, From, GroupID, Bind){ if (Bind == true) var Status = 'StatusBind'; else var Status = 'StatusUnbind'; var r = '\ <div id="'+ ID +'" class="Student '+ Status +' '+ GroupID +'">\ <span class="Name">'+ Name +'</span> \ <span class="From">'+ From +'</span>'; if (Bind == true) r +='<span class="action Action_UnbindStudent">Отсоединить студента</span>'; else r +='<span class="action Action_BindStudent">Прикрепить студента</span>'; r += '</div>'; return r; } function AddStudentInSearchBox(ID, Name, From, GroupID, Bind){ if (Bind == true) var Status = 'StatusBind'; else var Status = 'StatusUnbind'; var r = '\ <div id="'+ ID +'" class="Student '+ Status +' '+ GroupID +'">\ <span class="Name">'+ Name +'</span> \ <span class="From">'+ From +'</span>'; if (Bind == true) r +='<span class="action Action_UnbindStudent">Отсоединить студента</span>'; else r +='<span class="action Action_BindStudentFromSearch">Прикрепить студента</span>'; r += '</div>'; return r; } // Поиск студентов function CallSearchStudents() { var Name = []; if ($('.InputStudentName').val().length > 0) Name = ($('.InputStudentName').val()).split(' '); $.post( URLdir + 'handler/map/SearchStudents', { 'GradeID': $('.SelectGrade').val(), 'GroupN': $('.SelectStudyGroup').val(), 'FacultyID': FacultyID, 'Last': Name[0], 'First': Name[1], 'Second': Name[2], 'DisciplineID': DisciplineID }, function(data){ SearchResult = $.parseJSON(data); $('.SearchResult').html(''); if (parseInt(SearchResult.Count) > 0) for(var i = 1; i <= parseInt(SearchResult.Count); i++) { var ID = SearchResult[i].StudentID; var Name = SearchResult[i].StudentLast +' '+ SearchResult[i].StudentFirst +' '+ SearchResult[i].StudentSecond; var From = 'Курс ' + SearchResult[i].GroupGrade + ', Группа ' + SearchResult[i].GroupNum; var GroupID = 'GroupID_'+SearchResult[i].GroupID $('.SearchResult').append(AddStudentInSearchBox(ID, Name, From, GroupID, false)); } else $('.SearchResult').html('<p class="notification">Нет результатов... Возможно, студенты, соответствующие критериям поиска, уже прикреплены.</p>'); } ); } $('.SelectGrade').change(function(){ $.post( URLdir + 'handler/map/GetStudyGroups', { 'FacultyID': FacultyID, 'GradeID': $('.SelectGrade').val() }, function(data){ data = $.parseJSON(data); if (data != null && data != undefined) { $('.SelectStudyGroup').html('<option value="0">Выберите группу:</option>'); for (i = 1; i <= data.count; i++) { $('.SelectStudyGroup').append('<option value="'+ data[i].GroupID +'">Группа '+ data[i].GroupNum +' - '+ data[i].SpecName +'</option>'); } if (data.count <= 0) $('.SelectStudyGroup').append('<option value="0">Нет групп</option>'); } CallSearchStudents(); } ); }); $('.SelectStudyGroup').change(function(){ CallSearchStudents(); }); $('.InputStudentName').focusout(function(){ CallSearchStudents(); }); $('.InputStudentName').keydown(function(e){ if(e.keyCode==13){ $('.InputStudentName').focusout('focusout'); $(this).blur(); } }); $('.SelectGrade').focusout(function(){ $('.SelectGrade').trigger('change'); }); $('.SelectStudyGroup').focusout(function(){ $('.SelectStudyGroup').trigger('change'); }); // Если студент из поиска function BindStudentFromSearch(thisObj) { var reg = /GroupID_\d+/; var GroupID = ''+reg.exec(thisObj.parent().attr('class')); var ID = thisObj.parent().attr('id'); var Name = thisObj.siblings('.Name').text(); var From = thisObj.siblings('.From').text(); if ($('div').is('.GroupContainer.'+GroupID) === false) { $('.AttachedStudentsList').append('\ <div class="GradeAndGroupTitle ActionShowHideGroupContainer">\ <span class="info">'+From+'</span>\ <span class="Action">Открыть список ▼</span>\ </div>'); $('.AttachedStudentsList').append('<div class="GroupContainer '+GroupID+'" style="display: block"> </div>'); } $('.GroupContainer.'+GroupID).append(AddStudent(ID, Name, From, GroupID, true)); thisObj.parent().remove(); } // Если студент из основного потока function BindBackStudent(thisObj) { thisObj .removeClass('Action_BindStudent') .addClass('Action_UnbindStudent') .text('Отсоединить студента'); thisObj .parent() .removeClass('StatusUnbind') .addClass('StatusBind'); } // Прикрепить студента $('.StudentsList').on('click', '.Action_BindStudent', function(){ var thisObj = $(this); var ID = $(this).parent().attr('id'); $.post( URLdir + 'handler/map/BindStudent', { 'StudentID': ID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) { BindBackStudent(thisObj); EventInspector_ShowMsg('Студент добавлен', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление студента', 'error'); } ); }); // Прикрепить студента из поиска $('.StudentsList').on('click', '.Action_BindStudentFromSearch', function(){ var thisObj = $(this); var ID = $(this).parent().attr('id'); $.post( URLdir + 'handler/map/BindStudent', { 'StudentID': ID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) { BindStudentFromSearch(thisObj); EventInspector_ShowMsg('Студент добавлен', 'success'); } else EventInspector_ShowMsg('Ошибка при добавление студента', 'error'); } ); }); // Отсоединить студента $('.StudentsList').on('click', '.Action_UnbindStudent', function(){ $(this) .removeClass('Action_UnbindStudent') .addClass('Action_BindStudent') .text('Прикрепить студента'); $(this) .parent() .removeClass('StatusBind') .addClass('StatusUnbind'); var ID = $(this).parent().attr('id'); $.post( URLdir + 'handler/map/UnbindStudent', { 'StudentID': ID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Студент отсоединен', 'success'); else EventInspector_ShowMsg('Ошибка при отсоединение студента', 'error'); } ); }); $('.StudentsList').on('click', '.ActionShowHideGroupContainer', function(){ if ($(this).next('.GroupContainer').css('display') == 'none') { $(this).children('.Action').text('Скрыть список ▲'); $(this).next('.GroupContainer').show(); } else { $(this).children('.Action').text('Открыть список ▼'); $(this).next('.GroupContainer').hide(); } }); // Добавить преподавателя function AddTeacher(ID, Name, Action){ $r = '\ <div class="Teacher" id="'+ ID +'">\ <div class="Name">'+ Name +'</div>'; if (Action == 'Unbind') $r += '<div class="Action_UnbindTeacher Action">Отсоединить</div>'; if (Action == 'Bind') $r += '<div class="Action_BindTeacher Action">Присоединить</div>'; $r += '\ </div>'; return $r; } // Поиск преподавателей function CallSearchTeachers(){ var Name = []; Name = ($('.InputTeacherName ').val()).split(' '); $.post( URLdir + 'handler/map/SearchTeachers', { 'FacultyID': $('.SelectFaculty').val(), 'DepartmentID': $('.SelectDepartment').val(), 'Last': Name[0], 'First': Name[1], 'Second': Name[2], 'DisciplineID': DisciplineID }, function(data){ SearchResult = $.parseJSON(data); if (SearchResult != null && SearchResult != undefined) { $('.SearchResult').html(''); if (parseInt(SearchResult.Count) > 0) for(var i = 1; i <= parseInt(SearchResult.Count); i++) { var Name = SearchResult[i].TeacherLast + ' ' + SearchResult[i].TeacherFirst + ' ' + SearchResult[i].TeacherSecond; $('.SearchResult').append(AddTeacher(SearchResult[i].TeacherID, Name, 'Bind')); } else $('.SearchResult').html('<p class="notification">Нет результатов... Возможно, преподаватели, соответствующие критериям поиска, уже прикреплены.</p>'); } } ); } // Выборка кафедр $('.SelectFaculty').change(function(){ $.post( URLdir + 'handler/map/GetDepartments', { 'FacultyID': $('.SelectFaculty').val() }, function(data){ data = $.parseJSON(data); if (data != null && data != undefined) { $('.SelectDepartment').html('<option value="0">Выберите кафедру (не обязательно)</option>'); for (i = 1; i <= data.count; i++) { $('.SelectDepartment').append('<option value="'+ data[i].DepID +'">'+ data[i].DepName +'</option>'); } if (data.count <= 0) $('.SelectDepartment').append('<option value="0">Нет кафедр</option>'); } CallSearchTeachers(); } ); }); $('.SelectDepartment ').change(function(){ CallSearchTeachers(); }); $('.InputTeacherName').focusout(function(){ CallSearchTeachers(); }); $('.InputTeacherName').keydown(function(e){ if(e.keyCode==13){ $('.InputTeacherName').focusout('focusout'); $(this).blur(); } }); $('.SelectFaculty').focusout(function(){ $('.SelectFaculty').trigger('change'); }); $('.SelectDepartment').focusout(function(){ $('.SelectDepartment').trigger('change'); }); // Конец поиска преподавателей // Отсоединить преподавателя $('.TeachersList').on('click', '.Action_UnbindTeacher', function(){ $(this) .parent() .remove(); var ID = $(this).parent().attr('id'); $.post( URLdir + 'handler/map/UnbindTeacher', { 'BindingTeacher': ID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) EventInspector_ShowMsg('Преподаватель отсоединен', 'success'); else EventInspector_ShowMsg('Ошибка при отсоединение преподавателя', 'error'); } ); }); // Присоединить преподавателя $('.TeachersList').on('click', '.Action_BindTeacher', function(){ $(this) .parent() .remove(); var ID = $(this).parent().attr('id'); var Name = $(this).siblings('.Name').text(); $.post( URLdir + 'handler/map/BindTeacher', { 'BindingTeacher': ID, 'DisciplineID': DisciplineID }, function(data){ data = $.parseJSON(data); if(data.success === true) { $('.BindTeachersList').append(AddTeacher(ID, Name, 'Unbind')); EventInspector_ShowMsg('Преподаватель прикреплен', 'success'); } else EventInspector_ShowMsg('Ошибка при прикрепление преподавателя', 'error'); } ); }); });