Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        /// <summary> Изменение варианта л.р. </summary>
        public void ModifyLabVariant(LabVariant labVar)
        {
            CheckNotDisposed();

            Context.Entry(labVar).State = EntityState.Modified;
            Context.SaveChanges();
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
 public ResultVariants(LabVariant variant)
 {
     VarId    = variant.Id;
     VarName  = variant.Number;
     TasksVar = MakeTasksVariantFromLabVariant(variant.TaskVariants);
     IntrVar  = variant.IntroducingVariant;
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        /// <summary> Сохранение варианта л.р. </summary>
        public void SaveLabVariant(LabVariant labVar)
        {
            CheckNotDisposed();

            Context.LabVariants.Add(labVar);
            Context.SaveChanges();
        }
Exemplo n.º 7
0
        /// <summary> Проверить существование варианта лабораторной работы по Id</summary>
        public bool CheckLabVariantExist(long id)
        {
            CheckNotDisposed();

            LabVariant labVariant = Context.LabVariants.SingleOrDefault(l => l.Id == id);

            return(labVariant == null ? false : true);
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <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);
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        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);
            }
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
 private bool IsTestPoolCompleted(LabVariant variant, int?testIndex)
 {
     // TODO: Добавить организацию запрещения перехода к заданию, если TestPool - блокирующий (При добавлении подобного функционала в БД)
     return(testIndex != null);
 }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
 public void ModifyLabVariant(LabVariant labVar)
 {
     Contract.Requires(labVar != null);
 }
Exemplo n.º 16
0
 public JSONResultEditVariant(LabVariant variant)
 {
     Name               = variant.Number;
     Variant            = MakeVariantFromTasksVariant(variant.TaskVariants);
     IntroducingVariant = variant.IntroducingVariant;
 }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
 public void SaveLabVariant(LabVariant labVar)
 {
     Contract.Requires(labVar != null);
 }