public PersonDto(Person person)
        {

            Id = person.Id;
            ApplicationUserId = person.ApplicationUserId;
            FirstName = person.FirstName;
            LastName = person.LastName;
            Alias = person.Alias;
            Gender = person.Gender;
            DateOfBirth = person.DateOfBirth;

            PersonsAttribute = new List<PersonsAttributeDto>();

            foreach (var pattr in person.PersonsAttribute)
            {
                var dto = new PersonsAttributeDto();

                dto.Id = pattr.Id;
                dto.PersonsAttributeCategoryId = pattr.PersonsAttributeCategoryId;

                if (pattr.PersonalSubAttribute != null)
                {
                    foreach (var personalAttribute in pattr.PersonalSubAttribute)
                    {

                        var dto1 = new PersonalSubAttributeDto();

                        dto1.PersonsAttributeId = pattr.Id;

                        dto1.Id = personalAttribute.Id;
                        dto1.FirstName = personalAttribute.FirstName;
                        dto1.LastName = personalAttribute.LastName;
                        dto1.Alias = personalAttribute.Alias;

                        dto.PersonalSubAttributeDtos.Add(dto1);
                    }
                }

                if (pattr.PhoneNumberSubAttribute != null)
                {
                    foreach (var phone in pattr.PhoneNumberSubAttribute)
                    {

                        var dto1 = new PhoneNumberSubAttributeDto();

                        dto1.PersonsAttributeId = pattr.Id;

                        dto1.Id = phone.Id;
                        dto1.Ext = phone.Ext;
                        dto1.Number = phone.Number;

                        dto.PhoneNumberSubAttributeDtos.Add(dto1);

                    }
                }

                this.PersonsAttribute.Add(dto);

            }
        }
        private void Update(PersonalSubAttributeDto personalSubAttributeDto)
        {
            var personalSubAttributeEntity = _personsAttributeEntity.PersonalSubAttribute.Where(x => x.Id == personalSubAttributeDto.Id).FirstOrDefault();

            if (personalSubAttributeEntity == null)
            {
                throw new Exception("User is not authorised to update this personal sub attribute");
            }

            TransferInfo(personalSubAttributeDto, personalSubAttributeEntity);

            _dbContext.Entry(personalSubAttributeEntity).State = System.Data.Entity.EntityState.Modified;
        }
        private void TransferInfo(PersonalSubAttributeDto dto, PersonalSubAttribute entity)
        {
            if (dto.IsNew)
            {
                entity.Id = Guid.NewGuid().ToString();
            }

            entity.FirstName = dto.FirstName;
            entity.LastName = dto.LastName;
            entity.Alias = dto.Alias;
        }
        private void Add(PersonalSubAttributeDto personalSubAttributeDto)
        {
            var personalSubAttributeEntity = new PersonalSubAttribute();
            TransferInfo(personalSubAttributeDto, personalSubAttributeEntity);

            _personsAttributeEntity.PersonalSubAttribute.Add(personalSubAttributeEntity);

            //update subAttrbutes (
        }
        public PersonDto ToDto()
        {
            var personDto = new PersonDto();

            personDto.Id = PersonId;
            personDto.FirstName = FirstName;
            personDto.LastName = LastName;
            personDto.Alias = Alias;
            personDto.DateOfBirth = DateOfBirth;
            personDto.Gender = Gender.Value;

            personDto.ModifyActionRequired = ModifyActionRequired;


            personDto.PersonsAttribute = new List<PersonsAttributeDto>();

            if (EmergencyContactViewModels != null)
            {
                foreach (var evm in EmergencyContactViewModels)
                {

                    var personsAttributeDto = new PersonsAttributeDto();

                    personsAttributeDto.Id = evm.PersonsAttributeId;
                    personsAttributeDto.PersonId = personDto.Id;
                    personsAttributeDto.PersonsAttributeCategoryId = evm.PersonsAttributeCategoryId;
                    personsAttributeDto.ModifyActionRequired = evm.ModifyActionRequired; 

                    PersonalSubAttributeDto personalSubAttributeDto = new PersonalSubAttributeDto();
                    personalSubAttributeDto.Id = evm.PersonalSubAttributeId;
                    personalSubAttributeDto.FirstName = evm.FirstName;
                    personalSubAttributeDto.LastName = evm.LastName;
                    personalSubAttributeDto.Alias = evm.Alias;
                    personalSubAttributeDto.FirstName = evm.FirstName;

                    personalSubAttributeDto.ModifyActionRequired = evm.ModifyActionRequired;

                    personsAttributeDto.PersonalSubAttributeDtos.Add(personalSubAttributeDto);

                    var phoneNumberSubAttributeDto = new PhoneNumberSubAttributeDto();
                    phoneNumberSubAttributeDto.Id = evm.PhoneNumberSubAttributeId;
                    phoneNumberSubAttributeDto.Number = evm.PhoneNumber;
                    phoneNumberSubAttributeDto.ModifyActionRequired = evm.ModifyActionRequired;

                    personsAttributeDto.PhoneNumberSubAttributeDtos.Add(phoneNumberSubAttributeDto);

                    personDto.PersonsAttribute.Add(personsAttributeDto);

                }
            }

            return personDto;

        }