public JsonResult EditVariant(string Number, string JsonArr, bool IntrVar, long variantId) { LabVariant labVar = _labRepository.GetLabVariantById(variantId); long labId = labVar.LabWork.Id; if (_labRepository.CheckLabVariantExist(labId, Number) && (_labRepository.GetLabVariantIdByNumber(labId, Number) != variantId)) { return(Json(ResponseConstants.LabVariantNameCollisionSystemName)); } labVar.Number = Number; labVar.IntroducingVariant = IntrVar; labVar.Version += 1; labVar.TaskVariants.Clear(); labVar.TaskVariants = MakeTaskVariantsList(JsonConvert.DeserializeObject <long[]>(JsonArr)); try { _labRepository.ModifyLabVariant(labVar); } catch (Exception) { return(Json(ResponseConstants.LabVariantModifyErrorSystemName)); } return(Json(ResponseConstants.LabVariantModifySuccessSystemName)); }
/// <summary> Изменение варианта л.р. </summary> public void ModifyLabVariant(LabVariant labVar) { CheckNotDisposed(); Context.Entry(labVar).State = EntityState.Modified; Context.SaveChanges(); }
public JsonResult EditVariant(string Number, string JsonArr, bool IntrVar, long variantId, long testPoolId) { LabVariant labVar = _labRepository.GetLabVariantById(variantId); long labId = labVar.LabWork.Id; if (_labRepository.CheckLabVariantExist(labId, Number) && (_labRepository.GetLabVariantIdByNumber(labId, Number) != variantId)) { return(Json(ResponseConstants.LabVariantNameCollisionSystemName)); } labVar.Number = Number; labVar.IntroducingVariant = IntrVar; labVar.Version += 1; labVar.TaskVariants.Clear(); labVar.TaskVariants = MakeTaskVariantsList(JsonConvert.DeserializeObject <long[]>(JsonArr)); // TODO: не обновляет на null. Однако, если поставить точку остановки после получения labVar - null ставится labVar.TestPool = (testPoolId > 0) ? _testPoolRepository.GetTestPoolById(testPoolId) : null; try { _labRepository.ModifyLabVariant(labVar); } catch (Exception) { return(Json(ResponseConstants.LabVariantModifyErrorSystemName)); } return(Json(ResponseConstants.LabVariantModifySuccessSystemName)); }
public ResultVariants(LabVariant variant) { VarId = variant.Id; VarName = variant.Number; TasksVar = MakeTasksVariantFromLabVariant(variant.TaskVariants); IntrVar = variant.IntroducingVariant; }
private DomainModel.TestPoolEntry TryGetTestPoolEntry(Result result, LabVariant lab, int?testIndex) { if (!testIndex.HasValue) { return(null); } var testEntry = lab.TestPool.TestPoolEntries.SingleOrDefault(e => e.Id == testIndex.Value); if (testEntry == null) { return(null); } var testResult = result .AbstractResultEntries .OfType <TestResult>() .SingleOrDefault(tr => tr.TestPoolEntry.Id == testEntry.Id && tr.Status == ExecutionStatus.Complete); if (testResult?.Status == ExecutionStatus.Complete) { return(null); } return(testEntry); }
/// <summary> Сохранение варианта л.р. </summary> public void SaveLabVariant(LabVariant labVar) { CheckNotDisposed(); Context.LabVariants.Add(labVar); Context.SaveChanges(); }
/// <summary> Проверить существование варианта лабораторной работы по Id</summary> public bool CheckLabVariantExist(long id) { CheckNotDisposed(); LabVariant labVariant = Context.LabVariants.SingleOrDefault(l => l.Id == id); return(labVariant == null ? false : true); }
/// <summary> Проверить принадлежность варианта л.р. лабораторной работе </summary> public bool CheckLabVariantBelongLabWork(long labId, long labVarId) { CheckNotDisposed(); LabVariant labVariant = Context.LabVariants.Where(lv => lv.Id == labVarId).SingleOrDefault(lv => lv.LabWork.Id == labId); return(labVariant == null ? false : true); }
/// <summary> Проверить существование варианта лабораторной работы по имени</summary> public bool CheckLabVariantExist(long labId, string name) { CheckNotDisposed(); LabVariant labVariant = Context.LabVariants .Where(lv => lv.LabWork.Id == labId) .SingleOrDefault(l => l.Number == name); return(labVariant == null ? false : true); }
public JsonResult CreateVariant(long Id, string Number, string JsonArr, bool IntrVar) { LabWork lab = _labRepository.GetLabWorkById(Id); if (_labRepository.CheckLabVariantExist(Id, Number)) { return(Json(ResponseConstants.LabVariantNameCollisionSystemName)); } LabVariant labVar = _labWorksContext.LabVariants.CreateNew(); labVar.LabWork = lab; labVar.Number = Number; labVar.IntroducingVariant = IntrVar; labVar.Version = 1; labVar.TaskVariants = MakeTaskVariantsList(JsonConvert.DeserializeObject <long[]>(JsonArr)); return(Json(ResponseConstants.LabVariantSaveSuccessSystemName)); }
private static SimpleProgram GetProgramm(LabVariant Variant) { switch (Variant) { case LabVariant.Type1: return(new FarmerPuzzle()); //break; case LabVariant.Type2: return(new Calculator()); //break; case LabVariant.Type3: return(new Factorial()); //break; case LabVariant.Type4: return(new GuessTheNumber()); //break; default: return(null); } }
private VariantExecutionModelBase CreateTaskExecutionModel(Uri taskCompleteRedirect, Task task, LabVariant variant, LabWork lab, Result result) { var initParams = InitParams.ForDemoMode( _authService.GetSessionInfo().SessionGuid, task.Id, variant.Id, lab.Id, taskCompleteRedirect); var model = CreateModelHeader <TaskVariantExecutionModel>(result, task); model.TaskName = task.Name; model.TaskId = task.Id; model.InitParams = _initParamsProvider.GetInitParamsString(initParams); return(model); }
private bool IsTestPoolCompleted(LabVariant variant, int?testIndex) { // TODO: Добавить организацию запрещения перехода к заданию, если TestPool - блокирующий (При добавлении подобного функционала в БД) return(testIndex != null); }
private VariantExecutionModelBase CreateTestExecutionModel(Uri taskCompleteRedirect, DomainModel.TestPoolEntry test, LabVariant variant, LabWork lab, Result result) { var model = new TestExecutionModel(); model.Name = test.TestPool.Name; model.Question = test.TestQuestion.Question; model.Answers = test.TestQuestion.AnswerVariants; model.QuestionId = test.Id; model.OtherTasks = GetOtherTasksModels(lab, result, null, test).ToArray(); model.VariantId = variant.Id; model.LabName = lab.Name; var operation = _operationFactory.Create(); var testResult = operation.DataContext.Query.OfEntities <TestResult>().FirstOrDefault(e => e.TestPoolEntry.Id == test.Id & e.Result.Id == result.Id); operation.Complete(); model.TestResult = testResult.Id; return(model); }
public void ModifyLabVariant(LabVariant labVar) { Contract.Requires(labVar != null); }
public JSONResultEditVariant(LabVariant variant) { Name = variant.Number; Variant = MakeVariantFromTasksVariant(variant.TaskVariants); IntroducingVariant = variant.IntroducingVariant; }
protected VariantExecutionModelBase LoadImpl(LabVariant variant, int?taskIndex, int?testIndex, Uri taskCompleteRedirect) { var lab = variant.LabWork; var student = GetCurrentStudent(); var resultsToInterrupt = FindResultsToInterrupt(student); var latestCurrentResult = FindLatestCurrentResult(resultsToInterrupt, lab); // Если есть, то вместо начала нового выполнения, продолжим старое. if (latestCurrentResult != null) { resultsToInterrupt = resultsToInterrupt.Except(new[] { latestCurrentResult }).ToArray(); } foreach (var oldResult in resultsToInterrupt) { oldResult.Score = null; oldResult.Status = ExecutionStatus.Interrupted; } Result result; if (latestCurrentResult == null) { // Если не нашли, то заводим новый result = Factory.Create <Result>(); result.LabVariant = variant; result.Mode = variant.IntroducingVariant ? LabExecutionMode.IntroductoryMode : LabExecutionMode.TestMode; result.Student = student; foreach (var taskVariant in variant.TaskVariants) { var taskResult = Factory.Create <TaskResult>(); taskResult.Status = ExecutionStatus.Executing; taskResult.TaskVariant = taskVariant; taskResult.Result = result; result.AbstractResultEntries.Add(taskResult); } var randomArray = new Randomizer[variant.TestPool.TestPoolEntries.Count]; randomArray = Randomizer.InitializeArray(randomArray); var randomer = new Random(variant.TestPool.TestPoolEntries.Count); foreach (var testQuestion in variant.TestPool.TestPoolEntries) { var testResult = Factory.Create <TestResult>(); testResult.TestPoolEntry = testQuestion; var number = Randomizer.GetNewValue(randomArray, randomer); testResult.Index = number.ToString(); testResult.Result = result; randomArray = Randomizer.ChoseNumber(randomArray, number); testResult.StudentAnswers = new List <DomainModel.StudentAnswer>(); result.AbstractResultEntries.Add(testResult); } } else { result = latestCurrentResult; } var task = TryGetTaskByIndex(result, lab, taskIndex) ?? GetFirstUnsolvedTask(result); var test = TryGetTestPoolEntry(result, variant, testIndex) ?? GetFirstUnsolvedTest(result); var model = task == null ? test == null?CompleteVariant(result) : CreateTestExecutionModel(taskCompleteRedirect, test, variant, lab, result) : IsTestPoolCompleted(variant, testIndex) ? CreateTestExecutionModel(taskCompleteRedirect, test, variant, lab, result) : CreateTaskExecutionModel(taskCompleteRedirect, task, variant, lab, result); return(model); }
public void SaveLabVariant(LabVariant labVar) { Contract.Requires(labVar != null); }