Skip to content
Snippets Groups Projects
Forked from it-lab / grade
Source project has a limited visibility.
edit.js 14.88 KiB
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)
					alert('Ок, ChangeSubmoduleControlType');
				else alert('Error, ChangeSubmoduleControlType');
			}
		);
	}
	
	// Изменение макс. балла подмодуля
	function ChangeSubmoduleMaxRate(ID, NewMaxRate) {
		$.post(
			'/~dev_rating/handler/map/ChangeSubmoduleMaxRate',
			{
				'SubmoduleID': ID,
				'MaxRate': NewMaxRate
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true)
					alert('Ок, ChangeSubmoduleMaxRate');
				else alert('Error, ChangeSubmoduleMaxRate');
			}
		);
	}
	
	// Установить новый 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) {
					alert('Ок, SwapModuleOrder');
				} else alert('Error, SwapModuleOrder');
			}
		);
	}
	
	// Поменять местами два мероприятия
	function SwapSubmoduleOrder(SubmoduleID1, SubmoduleID2) {
		$.post(
			'/~dev_rating/handler/map/SwapSubmoduleOrder',
			{
				'SubmoduleID1': SubmoduleID1,
				'SubmoduleID2': SubmoduleID2
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					alert('Ок, SwapModuleOrder');
				} else alert('Error, SwapModuleOrder');
			}
		);
	}
	
//-------------------------------------------------------------------------------------------------------------------------------------------------
	
	// Изменения базовых параметров дисциплины
    $(".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) {
					alert('Ок, ChangeDiscipline');
				} else alert('Error, ChangeDiscipline');
			}
		);
        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);
					alert('Ок, AddModule');
				} else alert('Error, AddModule');
			}
		);
		
		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);
					alert('Ок, AddSubmodule');
				} else alert('Error, AddSubmodule');
			}
		);
	});
	
	// Удалить модуль
	$('.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)
					alert('Ок, DeleteModule');
				else alert('Error, DeleteModule');
			}
		);
		$(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)
					alert('Ок, DeleteSubmodule');
				else alert('Error, DeleteSubmodule');
			}
		);
		$(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){
					alert(data);
				}
			);
		}
	});
	
	// Поменять название мероприятие
	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){
					alert(data);
				}
			);
		}
	});
	
	// При записи в 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);
    });
	
});