コード例 #1
0
        public ActionResult Edit(StudySubjectViewModel model)
        {
            var identity = (ClaimsIdentity)User.Identity;
            var idString = identity.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier)
                           .Select(c => c.Value).SingleOrDefault();
            Guid UserId;

            if (Guid.TryParse(idString, out UserId))
            {
                using (JournalContext db = new JournalContext())
                {
                    User user      = db.Users.Find(UserId);
                    var  pupilRole = Guid.Parse(Roles.Pupil);
                    model.Users = db.Users.Where(c => c.UserRollID == pupilRole && c.SchoolID == user.SchoolID).Select(c => new SelectListItem()
                    {
                        Value = c.ID.ToString(), Text = c.FirstName + " " + c.LastName
                    }).ToList();
                    model.Subjects = db.Subjects.Where(c => c.Teacher.SchoolID == user.SchoolID).Select(c => new SelectListItem()
                    {
                        Value = c.ID.ToString(), Text = c.SubjectType.Name
                    }).ToList();
                    if (ModelState.IsValid)
                    {
                        StudySubject studySubject = db.StudySubject.Find(model.ID);
                        studySubject.UserID    = Guid.Parse(model.SelectedUser);
                        studySubject.SubjectID = Guid.Parse(model.SelectedSubject);
                        db.SaveChanges();
                        return(RedirectToAction("Index"));
                    }
                    return(View(model));
                }
            }
            return(RedirectToAction("Login"));
        }
コード例 #2
0
 public static void Save(StudySubject subject)
 {
     using (var db = new DBContext())
     {
         db.StudySubject.Add(subject);
         db.SaveChanges();
     }
 }
コード例 #3
0
            private IStudySubjectRepository CreateSubjectRepository(Study study, StudySubject subject)
            {
                var fake = A.Fake <IStudySubjectRepository>(x => x.Strict());

                A.CallTo(() => fake.GetStudySubject(study.Id, subject.SubjectIdentifier)).Returns(subject);
                A.CallTo(() => fake.FindStudySubject(study.Id, subject.PersonId)).Returns(subject);
                return(fake);
            }
コード例 #4
0
            private IConsentRepository CreateConsentRepository(Study study, StudySubject studySubject)
            {
                var consentRepository = A.Fake <IConsentRepository>(x => x.Strict());

                A.CallTo(() => consentRepository.AddConsent(A <Consent> ._))
                .Invokes((Consent c) => CreatedConsent = c);
                return(consentRepository);
            }
コード例 #5
0
 private static void AssertStudySubject(StudySubjectEntity expected, StudySubject actual)
 {
     using (new AssertionScope())
     {
         actual.StudyId.Id.Should().Be(expected.Study.Id);
         actual.PersonId.Id.Should().Be(expected.Person.Id);
         actual.SubjectIdentifier.Should().Be(expected.SubjectIdentifier);
     }
 }
コード例 #6
0
 /// <inheritdoc />
 public ConsentControllerTestBase()
 {
     Study         = Create.Study;
     StudyId       = new StudyIdentity(Study.Id);
     StudySubject  = new StudySubject(StudyId, "AA100023", new PersonIdentity(500L));
     Studies       = CreateStudyRepository(Study);
     StudySubjects = CreateSubjectRepository(Study, StudySubject);
     Consents      = CreateConsentRepository(Study, StudySubject);
 }
コード例 #7
0
 public ActionResult Delete(StudySubjectViewModel model)
 {
     using (JournalContext db = new JournalContext())
     {
         StudySubject studySubject = db.StudySubject.Find(model.ID);
         db.StudySubject.Remove(studySubject);
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
 }
コード例 #8
0
            /// <inheritdoc />
            public WhenRecordingConsent_ForANewStudySubject()
            {
                newSubjectIdentifier = StudySubject.SubjectIdentifier + "New";
                newPersonId          = StudySubject.PersonId.Id + 1;
                A.CallTo(() => StudySubjects.GetStudySubject(StudyId, newSubjectIdentifier)).Returns(null);
                A.CallTo(() => StudySubjects.FindStudySubject(StudyId, new PersonIdentity(newPersonId))).Returns(null);

                A.CallTo(() => StudySubjects.AddStudySubject(A <StudySubject> ._))
                .Invokes((StudySubject created) => createdStudySubject = created);

                RecordConsent(Evidences.ServerMedwayDto(takenBy: "Michael Fish"), A.Dummy <DateTime>(), subjectIdentifier: newSubjectIdentifier, personId: newPersonId);
            }
コード例 #9
0
 // GET: StudySubject/Details/5
 public ActionResult Details(Guid id)
 {
     using (JournalContext db = new JournalContext())
     {
         StudySubject          studySubject = db.StudySubject.Find(id);
         StudySubjectViewModel model        = new StudySubjectViewModel();
         model.UserID          = studySubject.UserID;
         model.SelectedUser    = db.Users.Where(c => c.ID == model.UserID).Select(c => c.FirstName + " " + c.LastName).FirstOrDefault();
         model.SubjectID       = studySubject.SubjectID;
         model.SelectedSubject = db.Subjects.Where(c => c.ID == model.SubjectID).Include(c => c.SubjectType).Select(c => c.SubjectType.Name).FirstOrDefault();
         return(View(model));
     }
 }
コード例 #10
0
        public ConsentIdentity FindActiveConsent(StudySubject studySubject)
        {
            var consents =
                Consents.Where(
                    _ => _.StudySubject.Person.Id == studySubject.PersonId.Id &&
                    _.StudySubject.Study.Id == studySubject.StudyId.Id &&
                    _.StudySubject.SubjectIdentifier == studySubject.SubjectIdentifier &&
                    _.DateWithdrawn == null);


            var consentId = consents.Select(_ => (long?)_.Id).SingleOrDefault();

            return(consentId == null ? null : new ConsentIdentity(consentId.Value));
        }
コード例 #11
0
 public ActionResult Create(StudySubjectViewModel model)
 {
     using (JournalContext db = new JournalContext())
     {
         if (ModelState.IsValid)
         {
             StudySubject studySubject = (StudySubject)model;
             studySubject.ID = Guid.NewGuid();
             db.StudySubject.Add(studySubject);
             db.SaveChanges();
             return(RedirectToAction("Index"));
         }
     }
     return(View(model));
 }
コード例 #12
0
        CreateStudySubject(string subjectIdentifier)
        {
            var person             = createContext.Add(new PersonEntity()).Entity;
            var studySubjectEntity = createContext.Add(
                new StudySubjectEntity
            {
                Person            = person,
                Study             = createContext.Find <StudyEntity>(study.Id),
                SubjectIdentifier = subjectIdentifier
            }).Entity;

            createContext.SaveChanges();

            var personId     = new PersonIdentity(person.Id);
            var studySubject = new StudySubject(studyId, subjectIdentifier, personId);

            return(personId, studySubjectEntity, studySubject);
        }
コード例 #13
0
        /// <inheritdoc />
        public void WithdrawConsent(StudySubject studySubject, params Evidence[] allEvidence)
        {
            var activeConsent = ConsentsFor(studySubject.StudyId.Id, studySubject.SubjectIdentifier)
                                .Where(_ => _.DateWithdrawn == null)
                                .OrderByDescending(_ => _.DateProvided)
                                .FirstOrDefault();

            activeConsent.DateWithdrawn = DateTime.Now;
            foreach (var evidence in allEvidence)
            {
                activeConsent.WithdrawnEvidence.Add(
                    new WithdrawnEvidenceEntity
                {
                    Type  = evidence.Definition.SystemName,
                    Value = EvidenceRegistry.MarshallToXml(evidence).ToString(SaveOptions.DisableFormatting),
                }
                    );
            }
        }
コード例 #14
0
        public static StudySubjectModel ToModel(this StudySubject subject)
        {
            if (subject == null)
            {
                return(null);
            }

            var model = new StudySubjectModel()
            {
                Name  = subject.Name,
                Marks = new List <MarkModel>(),
            };

            if (subject.Mark != null)
            {
                model.Marks = subject.Mark.Select(m => m.ToModel()).ToList();
            }

            return(model);
        }
コード例 #15
0
        public static StudySubject ToData(this StudySubjectModel subject)
        {
            if (subject == null)
            {
                return(null);
            }

            var data = new StudySubject()
            {
                Name = subject.Name,
                Mark = new List <Mark>(),
            };

            if (subject.Marks != null)
            {
                data.Mark = subject.Marks.Select(m => m.ToData()).ToList();
            }

            return(data);
        }
コード例 #16
0
        public ActionResult Edit(Guid?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }
            var identity = (ClaimsIdentity)User.Identity;
            var idString = identity.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier)
                           .Select(c => c.Value).SingleOrDefault();
            Guid UserId;

            if (Guid.TryParse(idString, out UserId))
            {
                using (JournalContext db = new JournalContext())
                {
                    User user = db.Users.Find(UserId);
                    StudySubjectViewModel model        = new StudySubjectViewModel();
                    StudySubject          studySubject = db.StudySubject.Find(id);
                    var pupilRole = Guid.Parse(Roles.Pupil);
                    model.ID        = studySubject.ID;
                    model.SubjectID = studySubject.SubjectID;
                    model.UserID    = studySubject.UserID;
                    model.Users     = db.Users.Where(c => c.UserRollID == pupilRole && c.SchoolID == user.SchoolID).Select(c => new SelectListItem()
                    {
                        Value = c.ID.ToString(), Text = c.FirstName + " " + c.LastName
                    }).ToList();
                    model.Subjects = db.Subjects.Where(c => c.Teacher.SchoolID == user.SchoolID).Select(c => new SelectListItem()
                    {
                        Value = c.ID.ToString(), Text = c.SubjectType.Name
                    }).ToList();
                    model.SelectedUser    = db.Users.Where(c => c.ID == model.UserID).Select(c => c.FirstName + " " + c.LastName).FirstOrDefault();
                    model.SelectedSubject = db.Subjects.Where(c => c.ID == model.SubjectID).Include(c => c.SubjectType).Select(c => c.SubjectType.Name).FirstOrDefault();
                    return(View(model));
                }
            }
            return(RedirectToAction("Login"));
        }
コード例 #17
0
 private Task <AgencyPersonDto> GetDetailsForPerson(StudySubject studySubject)
 {
     Logger.LogDebug("Getting details for {@Person}", studySubject.PersonId);
     return(ApiClient.GetPersonForAgencyAsync(AgencyName, studySubject.PersonId.Id));
 }
コード例 #18
0
        public IActionResult PutConsent([FromBody] ConsentSpecification specification)
        {
            if (!ModelState.IsValid)
            {
                Logger.LogInformation("Invalid ModelState {@error}", new SerializableError(ModelState));
                return(new BadRequestObjectResult(ModelState));
            }


            var study = Studies.GetStudy(specification.StudyId);

            if (study == null)
            {
                Logger.LogWarning("Study#{studyId} not found", specification.StudyId);
                return(NotFound());
            }
            var studySubject = Subjects.GetStudySubject(study.Id, specification.SubjectIdentifier);

            if (studySubject == null)
            {
                var subjectSpecification = new { specification.StudyId, specification.PersonId };
                Logger.LogDebug("No existing studySubject - creating a new subject for {spec}", subjectSpecification);
                var personId = new PersonIdentity(specification.PersonId);

                studySubject = Subjects.FindStudySubject(study.Id, personId);
                if (studySubject != null)
                {
                    Logger.LogError("There is already a study subject for {spec} - {identifier}", subjectSpecification, studySubject.SubjectIdentifier);
                    return(BadRequest());
                }

                studySubject = new StudySubject(study.Id, specification.SubjectIdentifier, personId);
                studySubject = Subjects.AddStudySubject(studySubject);
            }
            else
            {
                var existingConsent = Consents.FindActiveConsent(studySubject);
                if (existingConsent != null)
                {
                    //TODO: Decide what to do with evidence, etc, for existing consents, or if you can be consented twice
                    return(new SeeOtherOjectActionResult(
                               "GetStudySubject",
                               routeValues: new { studyId = study, subjectIdentifier = studySubject.SubjectIdentifier },
                               result: existingConsent.Id));
                }
            }

            var evidence = EvidenceDtoMarshallers.ConvertToIdentifiers(specification.Evidence);

            var newConsentId = Consents.AddConsent(
                new Common.Consent.Consent(
                    studySubject,
                    specification.DateGiven,
                    specification.GivenBy,
                    evidence));

            return(CreatedAtAction(
                       "GetStudySubject",
                       new { studyId = study, subjectIdentifier = studySubject.SubjectIdentifier },
                       newConsentId.Id));
        }
コード例 #19
0
 public void Deconstruct(out StudySubject subject, out IEnumerable <PersonIdentifier> identifiers)
 {
     subject     = Subject;
     identifiers = Identifiers;
 }
コード例 #20
0
 private async Task <IList <IIdentifierValueDto> > GetIdentifiers(StudySubject studySubject)
 {
     return(fieldNames.Any()
         ? await ApiClient.GetPersonAsync(studySubject.PersonId.Id.Value)
         : Array.Empty <IIdentifierValueDto>());
 }