public PartialViewResult TestEntryForm(StartListModel model)
        {
            if (ModelState.IsValid)
            {
                // Get the questionlist
                var questionList = db.QuestionLists.Where(ql => ql.participationCode.Equals(model.Participationcode));

                // Get the participant
                var participant = db.Participants.Where(p => p.studentCode == model.Studentcode);

                // If both the codes are valid, continue
                if (questionList.Count() != 0 && participant.Count() != 0)
                {
                    return(TestForm(model, questionList.First().idQuestionList));
                }
                else
                {
                    // One of the codes was incorrect
                    ModelState.AddModelError(String.Empty, "The participationcode and/or studentcode was not valid.");
                }
            }
            else
            {
                // The data in one of the fields was invalid
                ModelState.AddModelError(String.Empty, "Invalid input(s)");
            }

            // Stay on the page with the current data
            return(PartialView("_TestEntryForm", model));
        }
        public PartialViewResult TestForm(StartListModel model, int idQuestionList)
        {
            //Get questions for the questionlist
            string sqlStringQuestions = "select q.* from Question as q join QuestionOrder as qo on qo.Question_idQuestion = q.idQuestion " +
                                        " join QuestionList as ql on ql.idQuestionList = qo.QuestionList_idQuestionList " +
                                        " where ql.participationCode = '" + model.Participationcode + "' order by qo.[order] ";
            var questionData = db.Database.SqlQuery <Question>(sqlStringQuestions);

            //Get all matchin answeroptions
            string sqlStringAnswerOptions = "select ao.* from AnswerOption as ao " +
                                            "join Question as q on q.idQuestion = ao.Question_idQuestion " +
                                            "join QuestionList_Question as qlq on qlq.Question_idQuestion = q.idQuestion " +
                                            "where qlq.QuestionList_idQuestionList = " + idQuestionList;
            var answerOptionData = db.Database.SqlQuery <AnswerOption>(sqlStringAnswerOptions);

            int idParticipant = db.Participants.Where(p => p.studentCode == model.Studentcode).First().idParticipant;

            //Get the last attempt value, used to increment attempt count
            string getLastAttempt = "SELECT MAX(Q2.attempt) as lastAttempt FROM AnswerOption as ao" +
                                    " join QuestionResult Q2 on ao.idAnswer = Q2.AnswerOption_idAnswer" +
                                    " WHERE ao.Question_idQuestion = " + questionData.First().idQuestion +
                                    " AND Q2.Participant_idParticipant = " + idParticipant +
                                    " AND Q2.QuestionList_idQuestionList = " + idQuestionList;

            int?lastAttempt = db.Database.SqlQuery <int?>(getLastAttempt).Single();

            ViewBag.attempt = lastAttempt;

            //List containing TestQuestionData models, used to combine all of the question data in one place
            List <TestQuestionData> testQuestionData = new List <TestQuestionData>();

            foreach (Question question in questionData)
            {
                testQuestionData.Add(new TestQuestionData
                {
                    questionData   = question,
                    answerOptions  = answerOptionData.Where(ao => question.idQuestion == ao.Question_idQuestion).ToList(),
                    idQuestionList = idQuestionList,
                    idParticipant  = idParticipant
                });
            }

            //Store the questionlist data in the tempdata
            TempData["testQuestionData"] = testQuestionData;
            TempData["attempt"]          = lastAttempt + 1;
            TempData.Keep();

            return(PartialView("_TestForm"));
        }
예제 #3
0
 private async Task <int> EvaluateRunNo(StartListModel slm)
 {
     return(await Task.Run(() =>
     {
         bool run1StillRunning = false;
         foreach (var member in slm.StartListMembers)
         {
             if (!(member.Finished || member.Disqualified))
             {
                 run1StillRunning = true;
                 break;
             }
         }
         return run1StillRunning ? 1 : 2;
     }));
 }
예제 #4
0
        public async Task <StartListModel> GetStartListForRaceId(int raceId, int runNo)
        {
            return(await Task.Run(() => {
                StartList = new StartListModel();
                StartList.raceId = raceId;
                StartList.StartListMembers = new ObservableCollection <StartListMemberModel>();

                IEnumerable <Skier> skiers = new AdoSkierDao(connectionFactory).FindAll();
                IEnumerable <RaceData> racedata = new AdoRaceDataDao(connectionFactory).FindAllByRaceId(raceId);

                if (skiers == null)
                {
                    throw new NullReferenceException("No skiers found");
                }

                IEnumerable <StartListMember> startListMembers =
                    new AdoStartListDao(connectionFactory)
                    .FindAllByRaceIdAndRunNo(raceId, runNo)
                    .OrderBy(startListMember => startListMember.StartPos);


                foreach (var startListMember in startListMembers)
                {
                    var skierdata = racedata.FirstOrDefault(data => data.SkierId == startListMember.SkierId);

                    StartList.StartListMembers.Add(
                        new StartListMemberModel()
                    {
                        Skier = new SkierModel(skiers.FirstOrDefault(skier => skier.Id == startListMember.SkierId)),
                        Startposition = startListMember.StartPos,
                        RunNo = startListMember.RunNo,
                        Blocked = skierdata != null && skierdata.Blocked,
                        Disqualified = skierdata != null && skierdata.Disqualified,
                        Finished = skierdata != null && skierdata.Finished,
                        Running = skierdata != null && skierdata.Running,
                        RaceDataId = skierdata?.Id ?? 0
                    }
                        );
                }

                return StartList;
            }));
        }