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); }