Exemple #1
0
        public async Task <ActionResult> UpdateMemberDemographics([FromBody] MemberDemographicsBO memberDemographics)
        {
            var jwt = await HttpContext.GetTokenAsync(BrokerConstants.TokenScheme, BrokerConstants.AccessToken);

            var auditLogBO = new AuditLogBO(_appSettings.Value.ApplicationName, jwt, _httpContextAccessor);
            var rows       = await _demographicsService.UpdateMemberDemographics(memberDemographics, auditLogBO);

            return(new JsonResult(rows));
        }
        /// <summary>
        /// Updates the member demographics.
        /// </summary>
        /// <param name="memberDemographics">The member demographics.</param>
        /// <param name="auditLogBO">The audit log bo.</param>
        /// <returns></returns>
        /// <exception cref="CustomException">
        /// MemberDemographicsForBrokerDemographicsUpdateEmptyErrorCode
        /// or
        /// MemberUpdateBrokerDemographicsEmptyErrorCode
        /// </exception>
        public Task <int> UpdateMemberDemographics(MemberDemographicsBO memberDemographics, AuditLogBO auditLogBO)
        {
            if (memberDemographics == null)
            {
                throw new CustomException(nameof(MemberConstants.MemberDemographicsForBrokerDemographicsUpdateEmptyErrorCode));
            }
            var rows = _demographicsDataAccess.UpdateMemberDemographics(memberDemographics, auditLogBO);

            if (rows == null)
            {
                throw new CustomException(nameof(MemberConstants.MemberUpdateBrokerDemographicsEmptyErrorCode));
            }
            return(rows);
        }
        private async Task <string> InvokeAdmin123Async(MemberDemographicsBO memberDemographics)
        {
            var admin123 = new Admin123Mapper(_unitOfWork);

            try
            {
                //Bind data to Admin123BO

                var admin123BO = new Admin123BO
                {
                    CORPID = _appSettings.Value.CorpId,
                    AGENT  = _appSettings.Value.AgentId, //UAT or demo replace with this code//memberSummary.BrokerId,
                    //UNIQUEID = $"{memberDemographics.ExternalMemberId}-{AppSettings.Environment}",
                    LASTNAME = memberDemographics.LastName,
                    ADDRESS1 = memberDemographics.Address1,
                    ADDRESS2 = string.IsNullOrEmpty(memberDemographics.Address2.Trim()) ? " " : memberDemographics.Address2,
                    CITY     = memberDemographics.City,
                    STATE    = memberDemographics.StateProvince,
                    ZIPCODE  = memberDemographics.ZipCode,
                    EMAIL    = memberDemographics.Email,
                    PHONE1   = memberDemographics.PhoneNumber
                };

                var memberId      = memberDemographics.ExternalMemberId;
                var memberObject  = JsonConvert.SerializeObject(admin123BO);
                var uri           = new Uri(_appSettings.Value.Admin123Url);
                var stringContent = new StringContent(memberObject, UnicodeEncoding.UTF8, "application/json");
                var t             = Task.Run(() => admin123.PostURIAsync(uri, stringContent, _appSettings.Value.Admin123User, _appSettings.Value.Admin123Password, memberObject, memberId));
                t.Wait();
                return(t.Result);
            }
            catch (Exception ex)
            {
                await admin123.InsertAdmin123LogAsync(ex.StackTrace, ex.Message.ToString());

                throw;
            }
        }
        /// <summary>
        /// Gets the member demographics.
        /// </summary>
        /// <param name="demographicsPermissionBO">The demographics permission bo.</param>
        /// <returns></returns>
        public async Task <MemberDemographicsBO> GetMemberDemographics(DemographicsPermissionBO demographicsPermissionBO)
        {
            //var memberRepo = _unitOfWork.GetRepository<Member>();
            //var memberDependentRepo = _unitOfWork.GetRepository<MemberDependent>();

            var member = await _unitOfWork.GetRepository <Member>().GetFirstOrDefaultAsync(a => a, b => b.UserId == demographicsPermissionBO.UserId);

            var dependents = await _unitOfWork.GetRepository <MemberDependent>().GetPagedListAsync(a => a, predicate: b => b.MemberId == member.MemberId,
                                                                                                   pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

            var memberDependent = dependents.Items.ToList();

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

            var memberAddress = await _unitOfWork.GetRepository <MemberAddress>().GetFirstOrDefaultAsync(a => a,
                                                                                                         s => s.MemberId == member.MemberId);

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

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

            var detailIds = dependents.Items.Select(d => d.MemberDetailId).ToList();

            var memberDemographicsBO = new MemberDemographicsBO();

            if (demographicsPermissionBO.SubscriberInfoPermission == MemberConstants.HasPermission)
            {
                memberDemographicsBO = MemberMapper.Map(member, memberAddress, memberDetails, memberSubscription.Items);
            }

            var dependentDetails = await _unitOfWork.GetRepository <MemberDetail>().GetPagedListAsync(a => a,
                                                                                                      predicate: md => detailIds.Contains(md.MemberDetailId),
                                                                                                      pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

            if (dependentDetails != null && (demographicsPermissionBO.DependentInfoPermission == MemberConstants.HasPermission ||
                                             demographicsPermissionBO.ServiceInfoPermission == MemberConstants.HasPermission ||
                                             demographicsPermissionBO.DigitalIdCardPermission == MemberConstants.HasPermission))
            {
                var planIds = memberSubscriptionPlan.Items.Select(d => d.PlanId).ToList();
                var plans   = await _unitOfWork.GetRepository <Plan>().GetPagedListAsync(a => a,
                                                                                         s => planIds.Contains(s.PlanId),
                                                                                         include: src => src.Include(e => e.Product),
                                                                                         pageIndex: BrokerConstants.PAGE_INDEX, pageSize: BrokerConstants.PAGE_SIZE);

                var paidThroughDate = memberSubscription.Items.Select(j => j.EndDate).FirstOrDefault();
                var levelOfCoverage = memberSubscriptionPlan.Items.Select(j => j.FamilyIndicator).FirstOrDefault();
                var planNames       = new List <string>();
                var productNames    = new List <string>();

                planNames    = plans.Items.Select(p => p.Name).ToList();
                productNames = plans.Items.Select(p => p.Product.Name).ToList();
                var products = new List <ProductInformationBO>();
                foreach (var plan in plans.Items.OrderBy(p => p.Type))
                {
                    if (!string.IsNullOrEmpty(plan.Product.ProductLabel) &&
                        plan.Product.ProductLabel.ToLower().Equals(MemberConstants.DentalVisionPlan))
                    {
                        var productDental = new ProductInformationBO
                        {
                            Name         = plan.Product.Name,
                            ProductCode  = plan.Product.ProductCode.Value,
                            ProductLabel = $"{MemberConstants.DentalPlan.Substring(0, 1).ToUpper()}{MemberConstants.DentalPlan.Substring(1)}"
                        };
                        products.Add(productDental);
                        var productVision = new ProductInformationBO
                        {
                            Name         = plan.Product.Name,
                            ProductCode  = plan.Product.ProductCode.Value,
                            ProductLabel = $"{MemberConstants.VisionPlan.Substring(0, 1).ToUpper()}{MemberConstants.VisionPlan.Substring(1)}"
                        };
                        products.Add(productVision);
                    }
                    else
                    {
                        var productInformation = new ProductInformationBO
                        {
                            Name         = plan.Product.Name,
                            ProductCode  = plan.Product.ProductCode.Value,
                            ProductLabel = (plan.Type == (int)PlanType.Primary)?
                                           $"{MemberConstants.MedicalPlan.Substring(0, 1).ToUpper()}{MemberConstants.MedicalPlan.Substring(1)}"
                                            : plan.Product.ProductLabel
                        };
                        products.Add(productInformation);
                    }
                }
                if (products.Count(p => p.ProductLabel.ToLower() == MemberConstants.MedicalPlan) > 1)
                {
                    products.RemoveAt(1);
                }

                memberDemographicsBO.DependentInformation = new List <DependentInformationBO>();

                if (demographicsPermissionBO.ServiceInfoPermission == MemberConstants.HasPermission ||
                    demographicsPermissionBO.DigitalIdCardPermission == MemberConstants.HasPermission)
                {
                    memberDemographicsBO.ServiceInformation = new List <ServiceInformationBO>();
                    var subscriberCoverageInfo = MemberMapper.Map(member, memberDetails, planNames, productNames, products, levelOfCoverage, paidThroughDate);
                    memberDemographicsBO.ServiceInformation.Add(subscriberCoverageInfo);
                }

                foreach (var memDe in dependentDetails.Items)
                {
                    var status = await SetDependentStatus(memDe.MemberDetailId);

                    if (demographicsPermissionBO.DependentInfoPermission == MemberConstants.HasPermission)
                    {
                        var relationId = memberDependent.Where(a => a.MemberDetailId == memDe.MemberDetailId).Select(j => j.RelationshipId).FirstOrDefault();

                        var dependentInformation = new DependentInformationBO
                        {
                            DependentDetailId     = memDe.MemberDetailId,
                            FirstName             = memDe.FirstName,
                            LastName              = memDe.LastName,
                            MemberName            = memDe.FirstName + memDe.LastName,
                            DependentRelationship = ((Relationship)relationId).ToString(),
                            DateOfBirth           = memDe.DateOfBirth,
                            DependentStatus       = ((DependentStatus)status).ToString(),
                            // DependentStatus =
                            AvatarImageId   = memDe.AvatarImageId,
                            PaidThroughDate = paidThroughDate
                        };
                        memberDemographicsBO.DependentInformation.Add(dependentInformation);
                    }

                    if (demographicsPermissionBO.ServiceInfoPermission == MemberConstants.HasPermission ||
                        demographicsPermissionBO.DigitalIdCardPermission == MemberConstants.HasPermission)
                    {
                        var serviceInformation = new ServiceInformationBO
                        {
                            DependentDetailId  = memDe.MemberDetailId,
                            FirstName          = memDe.FirstName,
                            LastName           = memDe.LastName,
                            MemberName         = memDe.FirstName + memDe.LastName,
                            MemberType         = MemberConstants.Dependent,
                            DigitalCardId      = dependents.Items.Where(a => a.MemberDetailId == memDe.MemberDetailId).Select(a => a.DigitalIdcardId).FirstOrDefault() ?? 0,
                            PaidThroughDate    = paidThroughDate,
                            PlanName           = planNames,
                            Product            = productNames,
                            ProductInformation = products,
                            LevelOfCoverage    = ((FamilyIndicator)levelOfCoverage).ToString(),
                            DependentStatus    = ((DependentStatus)status).ToString()
                        };
                        memberDemographicsBO.ServiceInformation.Add(serviceInformation);
                    }
                }

                memberDemographicsBO.DependentInformation = memberDemographicsBO.DependentInformation.OrderBy(a => a.DependentStatus).ToList();
            }

            return(memberDemographicsBO);
        }
        /// <summary>
        /// Updates the member demographics.
        /// </summary>
        /// <param name="memberDemographics">The member demographics.</param>
        /// <param name="auditLogBO">The audit log bo.</param>
        /// <returns></returns>
        public async Task <int> UpdateMemberDemographics(MemberDemographicsBO memberDemographics, AuditLogBO auditLogBO)
        {
            var isUpdateCount    = 0;
            var admin123Response = string.Empty;

            if (memberDemographics != null)
            {
                //Update Member PhoneNumber, Email & Address in Admin123
                admin123Response = await InvokeAdmin123Async(memberDemographics);

                if (admin123Response.Equals(HttpStatusCode.OK.ToString()))
                {
                    // Update Member PhoneNumber, Email & Address in MemberPortal Database
                    if (memberDemographics.MemberAddress != null)
                    {
                        var memberAddressRepo = _unitOfWork.GetRepository <MemberAddress>();
                        foreach (var addrToUpdate in memberDemographics.MemberAddress)
                        {
                            if (addrToUpdate.Id != 0)
                            {
                                var repoMemberAddress = memberAddressRepo.GetFirstOrDefault(a => a, b => b.MemberId == addrToUpdate.Id);

                                var existingMemberAddress = new MemberAddress();
                                existingMemberAddress = existingMemberAddress.Clone(repoMemberAddress);

                                if (repoMemberAddress != null)
                                {
                                    repoMemberAddress.AddressLine1 = addrToUpdate.AddressLine1;
                                    repoMemberAddress.AddressLine2 = addrToUpdate.AddressLine2;
                                    repoMemberAddress.City         = addrToUpdate.City;
                                    repoMemberAddress.StateCode    = addrToUpdate.StateCode;
                                    repoMemberAddress.ZipCode      = addrToUpdate.ZipCode;
                                }
                                var isInvalidState = await ValidateState(addrToUpdate.StateCode);

                                if (!isInvalidState)
                                {
                                    _unitOfWork.GetRepository <MemberAddress>().Update(repoMemberAddress);
                                    isUpdateCount += _unitOfWork.SaveChanges();
                                }
                                else
                                {
                                    return((int)Utilities.Enumerations.ValidateState.StateInvalid);
                                }

                                //Log audit for update action on BrokerAddress
                                await AuditMapper.AuditLogging(auditLogBO, memberDemographics.MemberID, AuditAction.Update, repoMemberAddress, existingMemberAddress);
                            }
                        }
                    }
                    if (memberDemographics.MemberDetails != null && Convert.ToInt64(memberDemographics.MemberDetails.MemberId) != 0)
                    {
                        var memberDetailsRepo = _unitOfWork.GetRepository <MemberDetail>();
                        var memberContact     = await memberDetailsRepo.GetFirstOrDefaultAsync(a => a, b => b.MemberDetailId == memberDemographics.MemberDetailId);

                        var existingMemberDetail = new MemberDetail();
                        existingMemberDetail = existingMemberDetail.Clone(memberContact);

                        memberContact.PhoneNumber = memberDemographics.MemberDetails.PhoneNumber;
                        memberContact.EmailId     = memberDemographics.MemberDetails.Email;

                        _unitOfWork.GetRepository <MemberDetail>().Update(memberContact);
                        isUpdateCount += _unitOfWork.SaveChanges();

                        //Log audit for update action
                        await AuditMapper.AuditLogging(auditLogBO, memberDemographics.MemberDetailId, AuditAction.Update, memberContact, existingMemberDetail);
                    }
                }
            }

            if (isUpdateCount > 1)
            {
                return((int)EditInformationStatus.Success);
            }
            else
            {
                return((int)EditInformationStatus.Fail);
            }
        }