Example #1
0
        public async Task <(int, long)> AddDependent([FromBody] DependentDetailsBO primaryMember)
        {
            var jwt = await HttpContext.GetTokenAsync(BrokerConstants.TokenScheme, BrokerConstants.AccessToken);

            var auditLogBO = new AuditLogBO(_appSettings.Value.ApplicationName, jwt, _httpContextAccessor);
            var statusCode = await _demographicsService.AddDependent(primaryMember, auditLogBO);

            return(statusCode);
        }
Example #2
0
 public static MemberDependent Map(DependentDetailsBO dependentMember, long memberDetailId)
 {
     return(new MemberDependent
     {
         MemberId = dependentMember.MemberId,
         MemberDetailId = memberDetailId,
         IsTobaccoUser = dependentMember.isTobaccoUser,
         CreatedOn = DateTime.Now,
         CreatedBy = dependentMember.MemberId,
         RelationshipId = dependentMember.RelationshipId
     });
 }
Example #3
0
        /// <summary>
        /// Adds the dependent.
        /// </summary>
        /// <param name="primaryMember">The primary member.</param>
        /// <param name="auditLogBO">The audit log bo.</param>
        /// <returns></returns>
        /// <exception cref="CustomException">
        /// MemberPrimaryMemberForAddDependentEmptyErrorCode
        /// or
        /// MemberAddDependentStatusEmptyErrorCode
        /// </exception>
        public async Task <(int, long)> AddDependent(DependentDetailsBO primaryMember, AuditLogBO auditLogBO)
        {
            if (primaryMember == null)
            {
                throw new CustomException(nameof(MemberConstants.MemberPrimaryMemberForAddDependentEmptyErrorCode));
            }
            var statusCode = await _demographicsDataAccess.AddDependent(primaryMember, auditLogBO);

            if (statusCode.Item1 == 0)
            {
                throw new CustomException(nameof(MemberConstants.MemberAddDependentStatusEmptyErrorCode));
            }
            return(statusCode);
        }
Example #4
0
 public static MemberDetail Map(DependentDetailsBO dependentMember, MemberDetail detail)
 {
     return(new MemberDetail
     {
         FirstName = dependentMember.FirstName.Trim(),
         LastName = dependentMember.LastName.Trim(),
         EmailId = detail.EmailId,
         PhoneNumber = detail.PhoneNumber,
         Gender = dependentMember.Gender,
         DateOfBirth = Convert.ToDateTime(dependentMember.DOB),
         CreatedBy = dependentMember.MemberId,
         CreatedOn = DateTime.Now,
         Ssn = dependentMember.Ssn ?? string.Empty
     });
 }
Example #5
0
 public static MemberDependentAddress Map(DependentDetailsBO dependentMember, long memberDetailId, MemberAddress memberAddress)
 {
     return(new MemberDependentAddress
     {
         MemberId = dependentMember.MemberId,
         MemberDetailId = memberDetailId,
         AddressTypeId = memberAddress.AddressTypeId,
         AddressLine1 = memberAddress.AddressLine1,
         AddressLine2 = memberAddress.AddressLine2,
         City = memberAddress.City,
         ZipCode = memberAddress.ZipCode.Trim(),
         StateCode = memberAddress.StateCode,
         CreatedOn = DateTime.Now,
         CreatedBy = memberAddress.MemberId
     });
 }
        /// <summary>
        /// Adds the dependent.
        /// </summary>
        /// <param name="dependentMember">The dependent member.</param>
        /// <param name="auditLogBO">The audit log bo.</param>
        /// <returns></returns>
        public async Task <(int, long)> AddDependent(DependentDetailsBO dependentMember, AuditLogBO auditLogBO)
        {
            var  statusCode  = DependentAddRemove.IsNotAdded;
            long dependentId = 0;

            var memberRepo = _unitOfWork.GetRepository <Member>();
            var memberInfo = await memberRepo.GetFirstOrDefaultAsync(a => a, b => b.MemberId == dependentMember.MemberId);

            var memberDetails = await _unitOfWork.GetRepository <MemberDetail>().GetFirstOrDefaultAsync(a => a,
                                                                                                        s => s.MemberDetailId == memberInfo.MemberDetailId);

            var memberDependentRepo        = _unitOfWork.GetRepository <MemberDependent>();
            var memberDependentDetailsRepo = _unitOfWork.GetRepository <MemberDetail>();
            var dependents = await memberDependentRepo.GetPagedListAsync(a => a, predicate : b => b.MemberId == dependentMember.MemberId);

            var dependentIds = dependents.Items.Select(i => i.MemberDetailId).ToList();

            var dependentDetails = await memberDependentDetailsRepo.GetPagedListAsync(a => a, predicate : b => dependentIds.Contains(b.MemberDetailId));

            var checkdependent = dependentDetails.Items.Where(d => (d.FirstName == dependentMember.FirstName) &&
                                                              (d.LastName == dependentMember.LastName) &&
                                                              (Convert.ToString(d.DateOfBirth.Date.ToString("yyyy-MM-dd")) == dependentMember.DOB) &&
                                                              (((Relationship)dependents.Items.FirstOrDefault(dep => dep.MemberDetailId == d.MemberDetailId).RelationshipId).ToString() == dependentMember.Relationship)).ToList();

            if (checkdependent.Any())
            {
                statusCode = DependentAddRemove.IsExisting;
                return((int)statusCode, 0);
            }

            var memberSubscriptionPlan = await _unitOfWork.GetRepository <MemberSubscribedPlan>().GetPagedListAsync(a => a,
                                                                                                                    s => s.MemberSubscription.MemberId == dependentMember.MemberId,
                                                                                                                    pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

            await _unitOfWork.GetRepository <MemberSubscription>().GetPagedListAsync(a => a,
                                                                                     s => s.MemberId == dependentMember.MemberId,
                                                                                     pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

            var existingFamilyIndicator = memberSubscriptionPlan.Items.Select(a => a.FamilyIndicator).FirstOrDefault();

            if (dependentMember != null)
            {
                var memberDependentId = 0;
                //Adding Details of Dependent in table

                var member = await _unitOfWork.GetRepository <Member>()
                             .GetFirstOrDefaultAsync(a => a, obj => obj.MemberId == dependentMember.MemberId);

                var details = await _unitOfWork.GetRepository <MemberDetail>()
                              .GetFirstOrDefaultAsync(a => a, obj => obj.MemberDetailId == member.MemberDetailId);

                var memberDetail = MemberMapper.Map(dependentMember, details);
                await _unitOfWork.GetRepository <MemberDetail>().InsertAsync(memberDetail);

                var dependentMemberDetailId = await _unitOfWork.SaveChangesAsync();

                if (dependentMemberDetailId > 0)
                {
                    var memberDependent = MemberMapper.Map(dependentMember, memberDetail.MemberDetailId);

                    dependentId = memberDetail.MemberDetailId;
                    var updatedFamilyIndicator = await UpdateFamilyIndicator(dependentMember.RelationshipId, existingFamilyIndicator, dependentMember.MemberId, "Add");

                    if (updatedFamilyIndicator > 0)
                    {
                        memberSubscriptionPlan.Items.All(msp => { msp.FamilyIndicator = updatedFamilyIndicator; return(true); });
                        _unitOfWork.GetRepository <MemberSubscribedPlan>().Update(memberSubscriptionPlan.Items);
                    }
                    await _unitOfWork.GetRepository <MemberDependent>().InsertAsync(memberDependent);

                    memberDependentId = await _unitOfWork.SaveChangesAsync();
                }

                if (memberDependentId > 0)
                {
                    var memberAddress = await _unitOfWork.GetRepository <MemberAddress>()
                                        .GetFirstOrDefaultAsync(a => a, obj => obj.MemberId == dependentMember.MemberId);

                    var memberDependentAddress = new MemberDependentAddress();
                    {
                        memberDependentAddress.MemberId       = dependentMember.MemberId;
                        memberDependentAddress.MemberDetailId = memberDetail.MemberDetailId;
                        memberDependentAddress.AddressTypeId  = memberAddress.AddressTypeId;
                        memberDependentAddress.AddressLine1   = memberAddress.AddressLine1;
                        memberDependentAddress.AddressLine2   = memberAddress.AddressLine2;
                        memberDependentAddress.City           = memberAddress.City;
                        memberDependentAddress.ZipCode        = memberAddress.ZipCode.Trim();
                        memberDependentAddress.StateCode      = memberAddress.StateCode;
                        memberDependentAddress.CreatedOn      = DateTime.Now;
                        memberDependentAddress.CreatedBy      = memberAddress.MemberId;

                        //var isInvalidState = await ValidateState(memberAddress.StateCode);
                        //if (!isInvalidState)
                        //{
                        await _unitOfWork.GetRepository <MemberDependentAddress>().InsertAsync(memberDependentAddress);

                        var rowCount = await _unitOfWork.SaveChangesAsync();

                        if (rowCount > 0)
                        {
                            statusCode = DependentAddRemove.IsAdded;
                        }
                        //}
                        //else
                        //    return ((int)Utilities.Enumerations.ValidateState.StateInvalid, 0);
                    }
                }

                if (dependentMember.MemberDependentQuestionAnswersBO != null)
                {
                    await SaveDependentMemberQuestionAnswerAsync(dependentMember.MemberDependentQuestionAnswersBO,
                                                                 memberDetail.MemberDetailId, member.MemberId);
                }
            }

            if (statusCode == DependentAddRemove.IsAdded)
            {
                //Adding Dependent Information to Member Dependent Status History
                {
                    var statusHistory = new List <MemberDependentStatusHistory>();

                    statusHistory.AddRange(memberSubscriptionPlan.Items.Select(q => new MemberDependentStatusHistory

                    {
                        MemberId               = dependentMember.MemberId,
                        MemberDetailId         = dependentId,
                        MemberSubscribedPlanId = q.MemberSubscribedPlanId,
                        CreatedBy              = dependentMember.MemberId,
                        CreatedOn              = DateTime.UtcNow
                    }));

                    await _unitOfWork.GetRepository <MemberDependentStatusHistory>().InsertAsync(statusHistory);

                    await _unitOfWork.SaveChangesAsync();
                }
                var mailTo      = _appSettings.Value.PlanChangeRequestEmail;
                var notificaton = await _unitOfWork.GetRepository <Notification>().GetFirstOrDefaultAsync(predicate: n => n.Type == (int)EmailType.MemberDependentActivation);

                var questionIds = dependentMember.MemberDependentQuestionAnswersBO
                                  .Select(q => q.DependentQuestionnaireId).ToList();
                var memberDependentQuestions = await _unitOfWork.GetRepository <MemberQuestionnaire>().GetPagedListAsync(
                    a => new { a.MemberQuestionnaireId, a.MemberQuestionnaire1 },
                    predicate: question => questionIds.Contains(question.MemberQuestionnaireId),
                    pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

                var questionsContext = string.Empty;
                var answerValue      = string.Empty;
                var i = 1;
                for (int item = 0; item < memberDependentQuestions.Items.Count; item++)
                {
                    if (answerValue.ToLower().Equals("no"))
                    {
                        answerValue = string.Empty;
                        continue;
                    }

                    var answer = dependentMember.MemberDependentQuestionAnswersBO.Where(q =>
                                                                                        q.DependentQuestionnaireId == memberDependentQuestions.Items[item]
                                                                                        .MemberQuestionnaireId).Select(ans => ans.DependentAnswer).ToArray();
                    answerValue = answer.Length > 0 && !string.IsNullOrEmpty(answer[0]) ? answer[0] : "No Inputs";

                    questionsContext = questionsContext + "<br/>" + "Q" + i + ". " +
                                       memberDependentQuestions.Items[item].MemberQuestionnaire1 + "<br/>Ans: " +
                                       answerValue.Substring(0, 1).ToUpper() + answerValue.Substring(1);
                    i++;
                }

                if (notificaton != null && dependentMember != null)
                {
                    //var isTobaccoUser = dependentMember.isTobaccoUser ? "Yes" : "No";
                    var subject = notificaton.Subject.Replace("{externalId}", memberInfo.ExternalId);
                    var body    = notificaton.Content.Replace("{firstname}", memberDetails.FirstName)
                                  .Replace("{lastname}", memberDetails.LastName)
                                  .Replace("{externalId}", memberInfo.ExternalId)
                                  .Replace("{dependentfirstname}", dependentMember.FirstName)
                                  .Replace("{dependentlastname}", dependentMember.LastName)
                                  .Replace("{relationship}", Convert.ToString((Relationship)dependentMember.RelationshipId))
                                  .Replace("{gender}",
                                           char.ToUpper(dependentMember.Gender[0]) + dependentMember.Gender.Substring(1))
                                  .Replace("{dateofbirth}", dependentMember.DOB)
                                  //.Replace("{istobaccouser}", isTobaccoUser)
                                  .Replace("{questionnaire}", questionsContext);

                    var email = MemberMapper.Map(mailTo, body, subject, _appSettings, notificaton.From);
                    await _emailService.SendEmailAsync(email);
                }
            }
            return((int)statusCode, dependentId);
        }