Example #1
0
        public async Task <JsonResult> GetMemberDemographics(int userId)
        {
            var jwt = await HttpContext.GetTokenAsync(BrokerConstants.TokenScheme, BrokerConstants.AccessToken);

            var auditLogBO = new AuditLogBO(_appSettings.Value.ApplicationName, jwt, _httpContextAccessor);

            var tokenObject = UtilityHelper.ParseJwt(jwt);
            var rolesJson   = tokenObject.Claims.FirstOrDefault(c => c.Type.ToLower() == MemberConstants.Roles.ToLower()).Value;
            var customRoles = JsonConvert.DeserializeObject <List <CustomRolesBO> >(rolesJson);

            var demographicsPermissionBO = new DemographicsPermissionBO
            {
                UserId     = userId,
                AuditLogBO = auditLogBO
            };

            if (customRoles != null)
            {
                demographicsPermissionBO.SubscriberInfoPermission = customRoles.Any(r => r.Privileges.
                                                                                    Any(p => p.Name.ToLower() == MemberConstants.MemberSubscriberInfoPermission.ToLower() && p.Permission.Any(pe => (int)pe.CanRead == 1))) ? 1 : 0;

                demographicsPermissionBO.DependentInfoPermission = customRoles.Any(r => r.Privileges.
                                                                                   Any(p => p.Name.ToLower() == MemberConstants.MemberDependentInfoPermission.ToLower() && p.Permission.Any(pe => (int)pe.CanRead == 1))) ? 1 : 0;

                demographicsPermissionBO.ServiceInfoPermission = customRoles.Any(r => r.Privileges.
                                                                                 Any(p => p.Name.ToLower() == MemberConstants.MemberServiceInfoPermission.ToLower() && p.Permission.Any(pe => (int)pe.CanRead == 1))) ? 1 : 0;

                demographicsPermissionBO.DigitalIdCardPermission = customRoles.Any(r => r.Privileges.
                                                                                   Any(p => p.Name.ToLower() == MemberConstants.MemberIdCardsPermission.ToLower() && p.Permission.Any(pe => (int)pe.CanRead == 1))) ? 1 : 0;
            }

            var memberDemographics = await _demographicsService.GetMemberDemographics(demographicsPermissionBO);

            return(new JsonResult(memberDemographics));
        }
Example #2
0
        /// <summary>
        /// Gets the member demographics.
        /// </summary>
        /// <param name="demographicsPermissionBO">The demographics permission bo.</param>
        /// <returns></returns>
        public Task <MemberDemographicsBO> GetMemberDemographics(DemographicsPermissionBO demographicsPermissionBO)
        {
            if (demographicsPermissionBO.UserId <= 0)
            {
                throw new CustomException(nameof(MemberConstants.MemberUserIdForMemberDemographicsEmptyErrorCode));
            }
            var memberDemographics = _demographicsDataAccess.GetMemberDemographics(demographicsPermissionBO);

            if (memberDemographics == null)
            {
                throw new CustomException(nameof(MemberConstants.MemberMemberDemographicsEmptyErrorCode));
            }
            return(memberDemographics);
        }
        /// <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);
        }