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); } }