private DomainModel.TestPoolEntry TryGetTestPoolEntry(Result result, DomainModel.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); }
public ResultVariants(DomainModel.LabVariant variant) { VarId = variant.Id; VarName = variant.Number; TasksVar = MakeTasksVariantFromLabVariant(variant.TaskVariants); IntrVar = variant.IntroducingVariant; }
public JSONResultEditVariant(DomainModel.LabVariant variant) { Name = variant.Number; Variant = MakeVariantFromTasksVariant(variant.TaskVariants); IntroducingVariant = variant.IntroducingVariant; TestPoolId = (variant.TestPool != null) ? variant.TestPool.Id : -1; }
protected VariantExecutionModelBase LoadImpl(DomainModel.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); } if (variant.TestPool != null) { 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); }
private VariantExecutionModelBase CreateTaskExecutionModel(Uri taskCompleteRedirect, Task task, DomainModel.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(DomainModel.LabVariant variant, int?testIndex) { // TODO: Добавить организацию запрещения перехода к заданию, если TestPool - блокирующий (При добавлении подобного функционала в БД) return(testIndex != null); }
private VariantExecutionModelBase CreateTestExecutionModel(Uri taskCompleteRedirect, DomainModel.TestPoolEntry test, DomainModel.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); }