Exemplo n.º 1
0
        public ActionResult TakeBaselineAssessment(Professional_Experience.Models.TakeBaselineAssessmentViewModel m)
        {
            //Get trial participant
            var trialParticipant = _db.Trial_Participant.FirstOrDefault(tp => tp.Trial_Id == m.TrialId && tp.Participant_Id == GetCurrentParticipant.Id);
            if (trialParticipant == null)
            {
                ModelState.AddModelError("", "Trial Participant not found!");
                return View("Index");
            }

            //Create baseline assessment record in the database
            var trialParticipantAssessmentType = new PX_Model.Trial_Participant_Assessment_Type();
            trialParticipantAssessmentType.Assessment_Type_Id = m.AssessmentTypeId;
            trialParticipantAssessmentType.Trial_Participant_Id = trialParticipant.Id;
            _db.Trial_Participant_Assessment_Type.Add(trialParticipantAssessmentType);
            _db.SaveChanges();

            //Save all the answers in the database
            foreach (var answer in m.Answers)
            {
                if (answer.QuestionType == PX_Model.Assessment_Type_Question.TYPE_MULTU_CHOICE_MULTI_SELECT)
                {
                    //If participant can give multiple answers
                    foreach (var a in answer.Options)
                    {
                        var ans = new PX_Model.Assessment_Type_Question_Answer();
                        ans.Answer = a;
                        ans.Answer_Type = answer.QuestionType;
                        ans.Assessment_Type_Question_Id = answer.QuestionId;
                        ans.Trial_Participant_Assessment_Type_Id = trialParticipantAssessmentType.Id;
                        _db.Assessment_Type_Question_Answer.Add(ans);
                    }
                }
                else
                {
                    var ans = new PX_Model.Assessment_Type_Question_Answer();
                    ans.Answer = answer.Answer;
                    ans.Answer_Type = answer.QuestionType;
                    ans.Assessment_Type_Question_Id = answer.QuestionId;
                    ans.Trial_Participant_Assessment_Type_Id = trialParticipantAssessmentType.Id;
                    _db.Assessment_Type_Question_Answer.Add(ans);
                }
                _db.SaveChanges();
            }

            return View("Index");
        }
        public ActionResult RandomiseTrialParticipants(Professional_Experience.Models.RandomiseViewModel m)
        {
            //Get the trial from database
            var trial = _db.Trials.FirstOrDefault(t => t.Id == m.TrialId);

            //If trial isn't in the database
            if (trial == null)
            {
                ModelState.AddModelError("", "Trial does not exist");
            }

            //If input had error
            if (m.NumberOfParticipantInIntervention < 0 || trial.Trial_Participant.Count < m.NumberOfParticipantInIntervention)
            {
                ModelState.AddModelError("", "Invalid number of participants to be added in intervention group");
            }

            //If everything is fine
            if (ModelState.IsValid)
            {
                var trialParticipants = trial.Trial_Participant;

                Random rnd = new Random();
                int count = trialParticipants.Count;
                int random = rnd.Next(0, count);
                
                //Randomly select the middle point in the list and divide the list into two groups
                for (int i = 0; i < m.NumberOfParticipantInIntervention; ++i)
                {
                    trialParticipants.ElementAt((i + random)  % count).Classification = PX_Model.Trial_Participant.CLASSIFICATION_INTERVENTION;
                }
                for (int i = m.NumberOfParticipantInIntervention; i < count; ++i)
                {
                    trialParticipants.ElementAt((i + random) % count).Classification = PX_Model.Trial_Participant.CLASSIFICATION_CONTROL;
                }
                trial.HasBeenRandomised = true;
                _db.SaveChanges();

                return View("Index");
            }

            //If there was an error
            m.Trials = getNonRandomisedTrials().AsEnumerable();
            return View(m);
        }