示例#1
0
        public IActionResult GetPersonForAgency(long id, [Required, NotNull] string agencySystemName)
        {
            var agency = IdentityRepository.GetAgency(agencySystemName);

            if (agency == null)
            {
                ModelState.AddModelError(nameof(agencySystemName), $"{agencySystemName} was not found");
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Debug.Assert(agency != null, nameof(agency) + " != null");

            var personIdentity = new PersonIdentity(id);

            if (!IdentityRepository
                .GetPeopleWithIdentifiers(new[] { personIdentity }, agency.RootIdentifierNames(), UserProvider)
                .TryGetValue(personIdentity, out var identifiers))
            {
                return(NotFound(id));
            }

            var personIdForAgency = IdentityRepository.GetPersonAgencyId(personIdentity, agency.Id);

            return(Ok(new AgencyPersonDto(personIdForAgency, IdentifierDtoMarshaller.MarshallToDtos(identifiers))));
        }
示例#2
0
        public void CanAddAStudySubject()
        {
            var person = createContext.Add(new PersonEntity()).Entity;

            createContext.SaveChanges();
            var personId = new PersonIdentity(person.Id);

            var subjectIdentifier = Random.String();
            var addedSubject      = CreateStudySubjectRepository(updateContext).AddStudySubject(
                new StudySubject(studyId, subjectIdentifier, personId));

            updateContext.SaveChanges();

            using (new AssertionScope())
            {
                addedSubject.Should().NotBeNull();
                addedSubject.StudyId.Should().Be(studyId);
                addedSubject.PersonId.Should().Be(personId);
                addedSubject.SubjectIdentifier.Should().Be(subjectIdentifier);
            }

            var studySubjectEntity = readContext.Set <StudySubjectEntity>()
                                     .Include(_ => _.Study)
                                     .Include(_ => _.Person)
                                     .SingleOrDefault(
                _ => _.Study.Id == addedSubject.StudyId && _.Person.Id == addedSubject.PersonId);

            using (new AssertionScope())
            {
                studySubjectEntity.Should().NotBeNull();
                studySubjectEntity.SubjectIdentifier.Should().Be(subjectIdentifier);
                studySubjectEntity.Study.Id.Should().Be(studyId.Id);
                studySubjectEntity.Person.Id.Should().Be(personId.Id);
            }
        }
示例#3
0
        /// <summary>
        /// 返回EasyChatTimeModel
        /// </summary>
        /// <param name="identity">身份</param>
        /// <param name="nameCn">中文名</param>
        /// <param name="email">邮箱</param>
        /// <param name="mobile">电话</param>
        /// <param name="personId">id</param>
        /// <returns></returns>
        public EasyChatTimeModel ReturnEasyChatTimeModel(PersonIdentity identity, string nameCn, string email, string mobile, Guid personId)
        {
            EasyChatTimeModel returnModel = new EasyChatTimeModel();
            ContactIdentity   contact     = new ContactIdentity
            {
                PersonIdentity = identity.ToString(),
                NameCn         = nameCn,
                Email          = email,
                Mobile         = mobile
            };
            IEnumerable <EasyChatTimeEntity> easyChatTimes = null;

            if (identity == PersonIdentity.学生)
            {
                easyChatTimes = repository.EasyChatTime.Where(e => e.IfStudentID == personId).Select(e => e);
            }
            else
            {
                easyChatTimes = repository.EasyChatTime.Where(e => e.IfParentID == personId).Select(e => e);
            }

            returnModel.ContactIdentity = contact;
            returnModel.EasyChatTimes   = easyChatTimes;
            return(returnModel);
        }
示例#4
0
        /// <summary>
        /// 修改联系人
        /// </summary>
        /// <param name="contact">EasyChatTimeModel类型</param>
        /// <param name="contactIdentity">联系人身份</param>
        /// <param name="studentID"></param>
        void EditContact(EasyChatTimeModel contact, string contactIdentity, Guid studentID)
        {
            PersonIdentity identity = (PersonIdentity)Enum.Parse(typeof(PersonIdentity), contactIdentity);
            //联系人身份
            string personIdentity = contactIdentity;

            if (contact == null)
            {
                if (IsHaveContact(personIdentity, studentID))       //如果数据库中对应身份的联系人记录,则删掉
                {
                    repository.RemoveStudentParent(identity, studentID);
                }
            }
            else
            {
                if (IsHaveContact(personIdentity, studentID))       //如果数据库中有对应身份的联系人记录,则修改
                {
                    EditParentAndChattime(contact, studentID);
                }
                else
                {
                    AddParentAndChattime(contact, studentID);       //如果数据库中没有对应身份的联系人记录,则添加
                }
            }
        }
示例#5
0
 /// <summary>
 /// Initializes a new instance of the StudySubject class.
 /// </summary>
 public StudySubject(string subjectIdentifier = default(string), StudyIdentity studyId = default(StudyIdentity), PersonIdentity personId = default(PersonIdentity))
 {
     SubjectIdentifier = subjectIdentifier;
     StudyId           = studyId;
     PersonId          = personId;
     CustomInit();
 }
示例#6
0
        /// <summary>
        /// 编辑Parent及其EasyChatTime
        /// </summary>
        /// <param name="contact"></param>
        /// <param name="studentID"></param>
        void EditParentAndChattime(EasyChatTimeModel contact, Guid studentID)
        {
            PersonIdentity identity = (PersonIdentity)Enum.Parse(typeof(PersonIdentity), contact.ContactIdentity.PersonIdentity);
            //根据联系人身份和学生ID找出数据库中的Parent记录
            StudentParentEntity parent = repository.StudentParent
                                         .FirstOrDefault(s => s.StudentID == studentID && s.PersonIdentity == identity);

            //联系人信息修改
            parent.NameCn = contact.ContactIdentity.NameCn;
            parent.Mobile = contact.ContactIdentity.Mobile;
            parent.Email  = contact.ContactIdentity.Email;
            parent.QQ     = contact.ContactIdentity.QQ;
            parent.Weixin = contact.ContactIdentity.Weixin;

            //保存联系人信息
            repository.SaveStudentParent(parent);

            //清空联系人的联系时间
            repository.EmptyContactEasyChatTimes(parent.ParentID);

            //重新添加联系人的联系时间
            if (contact.EasyChatTimes != null)
            {
                foreach (EasyChatTimeEntity item in contact.EasyChatTimes)
                {
                    item.IfParentID = parent.ParentID;
                    repository.SaveEasyChatTime(item);  //添加EasyChatTime信息
                }
            }
        }
示例#7
0
        public void RemoveStudentParent(PersonIdentity personIdentity, Guid studentID)
        {
            StudentParentEntity originEntity = context.StudentParent
                                               .FirstOrDefault(s => s.StudentID == studentID && s.PersonIdentity == personIdentity);

            context.StudentParent.Remove(originEntity);
            EmptyContactEasyChatTimes(originEntity.ParentID);

            context.SaveChanges();
        }
        public void BringsBackCorrectIdentifiers()
        {
            var personIdentity = new PersonIdentity(personOne.Id);
            var foundDetails   = CreateRepository(readContext)
                                 .GetPeopleWithIdentifiers(
                new[] { personIdentity },
                new[] { testIdentifierDefinition.SystemName },
                null
                );

            foundDetails.Should().ContainKey(personIdentity)
            .WhichValue.Should()
            .OnlyContain(identifier => identifier.Definition == testIdentifierDefinition);
        }
示例#9
0
        /// <summary>
        /// 检查StudentParent表中是否有学生的特定联系人
        /// </summary>
        /// <param name="personIdentity">联系人身份</param>
        /// <param name="studentID">学生ID</param>
        /// <returns></returns>
        bool IsHaveContact(string personIdentity, Guid studentID)
        {
            PersonIdentity      identity = (PersonIdentity)Enum.Parse(typeof(PersonIdentity), personIdentity);
            StudentParentEntity contact  = repository.StudentParent.FirstOrDefault(s => s.StudentID == studentID && s.PersonIdentity == identity);

            if (contact == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
        public void BringsBackNoIdentifiersWhenPersonHasNoIdentifiers()
        {
            var personIdentity = new PersonIdentity(personTwo.Id);

            var foundDetails = CreateRepository(readContext)
                               .GetPeopleWithIdentifiers(
                new[] { personIdentity },
                new[] { testIdentifierDefinition.SystemName },
                null
                );

            foundDetails.Should().ContainKey(personIdentity)
            .WhichValue.Should().BeEmpty();
        }
        /// <summary>
        /// Create approved SwapShift requests for a list of people.
        /// </summary>
        /// <param name="personNumbers">List of person numbers whose request is approved.</param>
        /// <param name="queryDateSpan">QueryDateSpan string.</param>
        /// <param name="statusName">Request statusName.</param>
        /// <returns>XML request string.</returns>
        private string CreateApprovedSwapShiftRequests(
            List <string> personNumbers,
            string queryDateSpan,
            string statusName)
        {
            var telemetryProps = new Dictionary <string, string>()
            {
                { "QueryDateSpan", queryDateSpan },
                { "KronosStatus", statusName },
            };

            this.telemetryClient.TrackTrace($"SwapShiftActivity - CreateApproveSwapShiftRequests starts: {DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture)}", telemetryProps);

            List <PersonIdentity> personIdentities = new List <PersonIdentity>();

            foreach (var personNumber in personNumbers)
            {
                PersonIdentity personIdentity = new PersonIdentity
                {
                    PersonNumber = personNumber,
                };

                personIdentities.Add(personIdentity);
            }

            var rq = new Models.RequestEntities.SwapShift.GetAllApprovedRequests.GetAllApprovedRequest
            {
                Action      = RetrieveWithDetails,
                RequestMgmt = new Models.RequestEntities.Common.RequestMgmt
                {
                    QueryDateSpan = $"{queryDateSpan}",
                    RequestFor    = SwapShiftRequest,
                    StatusName    = statusName,
                    Employees     = new Employees
                    {
                        PersonIdentity = personIdentities,
                    },
                },
            };

            var request = rq.XmlSerialize();

            this.telemetryClient.TrackTrace($"SwapShiftActivity - CreateApproveSwapShiftRequests: {request.ToString(CultureInfo.InvariantCulture)}", telemetryProps);
            this.telemetryClient.TrackTrace($"SwapShiftActivity - CreateApproveSwapShiftRequests ends: {DateTime.UtcNow.ToString("O", CultureInfo.InvariantCulture)}", telemetryProps);
            return(request);
        }
示例#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);
        }
        public IActionResult AddPersonIdentityAction(int idPersoana, long cnp, string serie, int numar, string emitent, DateTime dataEmitere, DateTime dataExpirare)
        {
            var person = _persons.GetById(idPersoana);

            var personIdentity = new PersonIdentity
            {
                CNP          = cnp,
                Serie        = serie,
                Numar        = numar,
                Emitent      = emitent,
                DataEmitere  = dataEmitere,
                DataExpirare = dataExpirare,
                Persoana     = person
            };

            _personIdentity.Add(personIdentity);
            return(RedirectToAction("Detail", new { id = idPersoana }));
        }
示例#14
0
        public string GetPersonAgencyId(PersonIdentity personId, AgencyIdentity agencyId)
        {
            var existing = context.Set <PersonAgencyId>()
                           .SingleOrDefault(_ => _.PersonId == personId.Id && _.AgencyId == agencyId.Id);

            if (existing != null)
            {
                return(existing.SpecificId);
            }

            var id = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).TrimEnd('=');

            context.Set <PersonAgencyId>()
            .Add(new PersonAgencyId {
                PersonId = personId.Id, AgencyId = agencyId.Id, SpecificId = id
            });
            context.SaveChanges();

            return(id);
        }
示例#15
0
 /// <inheritdoc />
 public StudySubject(StudyIdentity studyId, string subjectIdentifier, PersonIdentity personId)
 {
     SubjectIdentifier = subjectIdentifier;
     StudyId           = studyId ?? throw new ArgumentNullException(nameof(studyId));
     PersonId          = personId ?? throw new ArgumentNullException(nameof(personId));
 }
 /// <summary>
 /// Function to select person by person identity.
 /// </summary>
 /// <param name="personsParty">PersonsParty information</param>
 /// <param name="personIdentity">Person identity information</param>
 /// <returns>Instance of PersonsParty</returns>
 internal static PersonsParty SelectPersonByPersonIdentity(PersonsParty personsParty, PersonIdentity personIdentity)
 {
     AssignSelectedPerson(personsParty, RetrievePersonByPersonIdentity(personsParty.RetrievePersons(), personIdentity).FirstOrDefault(), null);
     return personsParty;
 }
 /// <summary>
 /// Function to retrieve persons by person identity.
 /// </summary>
 /// <param name="persons">List of persons</param>
 /// <param name="personIdentity">Person identity information</param>
 /// <returns>Persons information to query</returns>
 private static IEnumerable<PersonBase> RetrievePersonByPersonIdentity(IEnumerable<PersonBase> persons, PersonIdentity personIdentity)
 {
     return persons.Where(p => p.PersonId.Equals(personIdentity.PersonId, StringComparison.OrdinalIgnoreCase));
 }
 public void Remove(PersonIdentity newPersonIdentity)
 {
     _context.Remove(newPersonIdentity);
     _context.SaveChanges();
 }
 public void Add(PersonIdentity newPersonIdentity)
 {
     _context.Add(newPersonIdentity);
     _context.SaveChanges();
 }
示例#20
0
 /// <inheritdoc />
 public void UpdatePerson(
     PersonIdentity personIdentity, IEnumerable <PersonIdentifier> identifiers, Authority authority)
 {
     Update(People.Find(personIdentity.Id), identifiers, authority);
 }
示例#21
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));
        }
示例#22
0
        /// <summary>
        /// 返回EasyChatTimeModel
        /// </summary>
        /// <param name="identity">身份</param>
        /// <param name="nameCn">中文名</param>
        /// <param name="email">邮箱</param>
        /// <param name="mobile">电话</param>
        /// <param name="personId">id</param>
        /// <returns></returns>
        public EasyChatTimeModel ReturnEasyChatTimeModel(PersonIdentity identity, string nameCn, string email, string mobile, Guid personId)
        {
            EasyChatTimeModel returnModel = new EasyChatTimeModel();
            ContactIdentity contact = new ContactIdentity
            {
                PersonIdentity = identity.ToString(),
                NameCn = nameCn,
                Email = email,
                Mobile = mobile
            };
            IEnumerable<EasyChatTimeEntity> easyChatTimes = null;

            if (identity == PersonIdentity.学生)
                easyChatTimes = repository.EasyChatTime.Where(e => e.IfStudentID == personId).Select(e => e);
            else
                easyChatTimes = repository.EasyChatTime.Where(e => e.IfParentID == personId).Select(e => e);

            returnModel.ContactIdentity = contact;
            returnModel.EasyChatTimes = easyChatTimes;
            return returnModel;
        }
示例#23
0
 StudySubject IStudySubjectRepository.FindStudySubject(StudyIdentity study, PersonIdentity personId)
 {
     return(GetStudySubject(FindStudySubjectForPerson(study, personId)));
 }
示例#24
0
        public void RemoveStudentParent(PersonIdentity personIdentity, Guid studentID)
        {
            StudentParentEntity originEntity = context.StudentParent
                .FirstOrDefault(s => s.StudentID == studentID && s.PersonIdentity == personIdentity);
            context.StudentParent.Remove(originEntity);
            EmptyContactEasyChatTimes(originEntity.ParentID);

            context.SaveChanges();
        }
示例#25
0
        /// <inheritdoc />
        public ConsentRepositoryTests(ITestOutputHelper outputHelper, DatabaseFixture fixture) : base(outputHelper, fixture)
        {
            readContext   = CreateNewContextInSameTransaction();
            updateContext = CreateNewContextInSameTransaction();
            createContext = CreateNewContextInSameTransaction();


            study = createContext.Studies.Add(new StudyEntity {
                Name = Random.String()
            }).Entity;

            var consentedPerson = createContext.People.Add(new PersonEntity()).Entity;

            consentedStudySubject = createContext.Add(new StudySubjectEntity {
                Study = study, Person = consentedPerson, SubjectIdentifier = "Consented"
            }).Entity;
            createContext.Add(
                new ConsentEntity
            {
                StudySubject  = consentedStudySubject,
                DateProvided  = 1.December(1965),
                DateWithdrawn = 1.January(1966),
                GivenBy       = consentedPerson
            });

            activeConsent = createContext.Add(
                new ConsentEntity
            {
                StudySubject = consentedStudySubject,
                DateProvided = 1.February(1966),
                GivenBy      = consentedPerson
            }).Entity;

            var unconsentedPerson = createContext.People.Add(new PersonEntity()).Entity;

            createContext.Add(
                new StudySubjectEntity {
                Study = study, Person = unconsentedPerson, SubjectIdentifier = "Unconsented"
            });

            var withdrawnConsent = createContext.Add(new PersonEntity()).Entity;
            var withdrawnSubject = createContext.Add(
                new StudySubjectEntity {
                Study = study, Person = withdrawnConsent, SubjectIdentifier = "Withdrawn"
            }).Entity;

            withdrawnSubjectWithdrawnDate = 5.January(2018);
            createContext.Add(new ConsentEntity
            {
                StudySubject  = withdrawnSubject,
                DateProvided  = 1.December(2017),
                DateWithdrawn = withdrawnSubjectWithdrawnDate,
                GivenBy       = withdrawnConsent
            });


            createContext.SaveChanges();

            studyId             = new StudyIdentity(study.Id);
            consentedPersonId   = consentedPerson;
            unconsentedPersonId = unconsentedPerson;
            withdrawnPersonId   = withdrawnConsent;

            consents = CreateConsentRepository(readContext);

            studySubjects = CreateStudySubjectRepository(readContext);
            studies       = CreateStudyRepository(readContext);
        }