private CompoundResultReading <decimal?> CreateTestReadingforaDecimalValue(CustomerEventReadingEntity testReadingEntity, int readingId, List <StandardFindingTestReadingEntity> standardFindingTestReadingEntities, decimal?value)
        {
            StandardFindingTestReadingEntity standardFindingTestReading = null;

            if (testReadingEntity.StandardFindingTestReadingId != null)
            {
                standardFindingTestReading =
                    standardFindingTestReadingEntities.Find(standardFindingTestReadingEntity =>
                                                            (standardFindingTestReadingEntity.ReadingId == readingId) &&
                                                            (testReadingEntity.StandardFindingTestReadingId == standardFindingTestReadingEntity.StandardFindingTestReadingId)
                                                            );
            }

            var testReading = new CompoundResultReading <decimal?>(testReadingEntity.CustomerEventReadingId)
            {
                Label         = (ReadingLabels)readingId,
                Reading       = value,
                ReadingSource = testReadingEntity.IsManual
                                    ? ReadingSource.Manual
                                    : ReadingSource.Automatic,
                RecorderMetaData = new DataRecorderMetaData
                {
                    DataRecorderCreator  = new OrganizationRoleUser(testReadingEntity.CreatedByOrgRoleUserId),
                    DateCreated          = testReadingEntity.CreatedOn,
                    DataRecorderModifier = testReadingEntity.UpdatedByOrgRoleUserId.HasValue ? new OrganizationRoleUser(testReadingEntity.UpdatedByOrgRoleUserId.Value) : null,
                    DateModified         = testReadingEntity.UpdatedOn
                }
            };

            decimal testReadingValue = 0;
            var     allFindings      = new TestResultService().GetAllStandardFindings <decimal?>((int)TestType.Hemoglobin, readingId);

            if (testReadingEntity.Value != null && decimal.TryParse(testReadingEntity.Value, out testReadingValue))
            {
                var findings = (new TestResultService()).GetMultipleCalculatedStandardFinding(decimal.Round(testReadingValue, 1), (int)TestType.Hemoglobin, readingId);
                var finding  = findings.FirstOrDefault();

                if (findings.Count() == 1)
                {
                    testReading.Finding = new StandardFinding <decimal?>(Convert.ToInt64(testReadingEntity.StandardFindingTestReadingId == null ? finding : standardFindingTestReading.StandardFindingId));
                }
                else if (findings.Count() > 1)
                {
                    var avFindings = allFindings.FindAll(f => f.Label.ToLower().IndexOf(_toCheckFor) == 0);
                    finding             = findings.FirstOrDefault(f => avFindings.Select(av => av.Id).Contains(f));
                    testReading.Finding = new StandardFinding <decimal?>(Convert.ToInt64(testReadingEntity.StandardFindingTestReadingId == null ? finding : standardFindingTestReading.StandardFindingId));
                }
            }
            else if (testReadingEntity.StandardFindingTestReadingId != null)
            {
                testReading.Finding = new StandardFinding <decimal?>(standardFindingTestReading.StandardFindingId);
            }

            if (testReading.Finding != null)
            {
                testReading.Finding = allFindings.Find(standardFinding => standardFinding.Id == testReading.Finding.Id);
            }

            return(testReading);
        }
예제 #2
0
        public async Task <ActionResult> ModeratorTopicTestResults(int?courseId, string userEmail)
        {
            try
            {
                // I. Checks.
                if (userEmail == null)
                {
                    return(RedirectToAction("Login", "Account"));
                }
                string userId = UserService.FindUserIdByEmail(userEmail);
                // Check id.
                if (!int.TryParse(courseId.ToString(), out int intCourseId))
                {
                    return(RedirectToAction("Index"));
                }

                // II. Set ViewBag properties.
                ViewBag.UserName = (await UserService.GetAsync(userId)).UserName;
                // Get CourseDTO object.
                CourseDTO courseDTO = await CourseService.GetAsync(intCourseId);

                ViewBag.CourseTitle = courseDTO.CourseTitle;
                ViewBag.ParentId    = intCourseId;
                ViewBag.Trainee     = userEmail;

                // III. AutoMapper Setup.
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.TopicTitle))
                    .ForMember(tr => tr.TestResultDetails, option => option.Ignore())
                    .ForMember(tr => tr.UserEmail, option => option.Ignore());
                });
                IMapper iMapper = config.CreateMapper();

                //IV.Get data for a View.
                IEnumerable <TestResultDTO> testResultDTOs = TestResultService.Find(tr => tr.UserProfileId == userId && tr.IsTopicTest);
                IEnumerable <TestResultDTO> source         = TestResultService.Find(tr => tr.UserProfileId == userId && tr.IsTopicTest)
                                                             .Where(course => course.TestResultDetails.FirstOrDefault().Question.Topic.CourseId == intCourseId);
                //.ToList();
                IEnumerable <TestResultViewModel> testResults = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(source).OrderBy(tr => tr.TestTitle);

                // V.
                Session["PreviousAction"] = "ModeratorTopicTestResults";
                Session["UserEmail"]      = userEmail;
                return(View(testResults));
            }
            catch (Exception ex)
            {
                string innerException = string.Empty;
                if (ex.InnerException != null)
                {
                    innerException = ex.InnerException.Message;
                }
                throw new Exception("Error!!!       InnerException: " + innerException + ";    " + ex.Message);
            }
        }
예제 #3
0
        public async Task <ActionResult> ModeratorCourseTestResults(int?courseId, string userEmail)
        {
            try
            {
                // I. Checks.
                //  Get course Id for the selected course and check User email.
                if (!int.TryParse(courseId.ToString(), out int intCourseId) && userEmail != null)
                {
                    return(RedirectToAction("Index"));
                }
                // Get CourseDTO object.
                CourseDTO courseDTO = await CourseService.GetAsync(intCourseId);

                if (courseDTO == null)
                {
                    return(RedirectToAction("Index"));
                }

                // II. Set ViewBag properties.
                ViewBag.CourseTitle = courseDTO.CourseTitle;
                ViewBag.ParentId    = intCourseId;
                ViewBag.Trainee     = userEmail;

                // III. AutoMapper Setup.
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.Course.CourseTitle))
                    .ForMember("UserEmail", opt => opt.MapFrom(tr => tr.UserProfile.Email));
                    cfg.CreateMap <TestResultDetailDTO, TestResultDetailViewModel>()
                    .ForMember("Question", opt => opt.MapFrom(trd => trd.Question.QuestionText))
                    .ForMember("Topic", opt => opt.MapFrom(trd => trd.Question.Topic.TopicTitle));
                });
                IMapper iMapper = config.CreateMapper();

                // IV. Get data for a view.
                IEnumerable <SubscriptionDTO> courseSubscriptions = SubscriptionService.Find(dto =>
                                                                                             dto.CourseId == intCourseId &&
                                                                                             dto.Email == userEmail);
                IEnumerable <TestResultDTO> source = TestResultService.Find(tr => !tr.IsTopicTest)
                                                     .Where(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.CourseId == intCourseId)
                                                     .Join(courseSubscriptions,
                                                           tr => tr.UserProfileId,
                                                           cs => cs.UserProfileId,
                                                           (tr, cs) => tr).Distinct();                //.ToList();
                IEnumerable <TestResultViewModel> courseTestResults = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(source);

                // V.
                Session["PreviousAction"] = "ModeratorCourseTestResults";
                Session["UserEmail"]      = userEmail;
                return(View(courseTestResults));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
예제 #4
0
        // GET: CourseTestResults
        public async Task <ActionResult> CourseTestResults(int?id)
        {
            try
            {
                // I. Checks.
                string currentUserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
                if (currentUserId == null)
                {
                    return(RedirectToAction("Login", "Account"));
                }
                // Check id.
                if (!int.TryParse(id.ToString(), out int intId))
                {
                    return(RedirectToAction("Index"));
                }
                // Get CourseDTO object.
                CourseDTO courseDTO = await CourseService.GetAsync(intId);

                if (courseDTO == null)
                {
                    return(RedirectToAction("Index"));
                }

                // II. Set ViewBag properties.
                ViewBag.UserName    = (await UserService.GetAsync(currentUserId)).UserName;
                ViewBag.CourseTitle = courseDTO.CourseTitle;

                // III. AutoMapper Setup.
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.Course.CourseTitle))
                    .ForMember(tr => tr.TestResultDetails, option => option.Ignore())
                    .ForMember(tr => tr.UserEmail, option => option.Ignore());
                });
                IMapper iMapper = config.CreateMapper();

                // IV. Get data for a View.
                IEnumerable <TestResultDTO> source = TestResultService.Find(tr =>
                                                                            tr.UserProfileId == currentUserId &&
                                                                            !tr.IsTopicTest);  //.ToList();
                IEnumerable <TestResultViewModel> courseTestResultList = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(source)
                                                                         .Where(tr => tr.TestTitle == courseDTO.CourseTitle)
                                                                         .OrderBy(tr => tr.TestTitle);

                // V.
                Session["PreviousAction"] = "CourseTestResults";
                Session["UserEmail"]      = null;
                return(View(courseTestResultList));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
예제 #5
0
        // GET: Index
        public async Task <ActionResult> Index()
        {
            try
            {
                // I. Checks.
                string currentUserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
                if (currentUserId == null)
                {
                    return(RedirectToAction("Login", "Account"));
                }

                // II. AutoMapper Setup.
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <CourseDTO, CourseViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(obj => obj.CourseId))
                    .ForMember("Name", opt => opt.MapFrom(obj => obj.CourseTitle))
                    .ForMember("IsSubscribed", opt => opt.MapFrom(course =>
                                                                  course.Subscriptions.Where(subscription =>
                                                                                             currentUserId != null &&
                                                                                             subscription.UserProfileId == currentUserId &&
                                                                                             subscription.CourseId == course.CourseId &&
                                                                                             (DateTime.Now - subscription.StartDate < TimeSpan.FromDays(subscription.SubscriptionPeriod)) &&
                                                                                             subscription.IsApproved).Count() == 1))
                    .ForMember("IsInApproving", opt => opt.MapFrom(course =>
                                                                   course.Subscriptions.Where(subscription =>
                                                                                              currentUserId != null &&
                                                                                              subscription.UserProfileId == currentUserId &&
                                                                                              subscription.CourseId == course.CourseId &&
                                                                                              (DateTime.Now - subscription.StartDate < TimeSpan.FromDays(subscription.SubscriptionPeriod)) &&
                                                                                              !subscription.IsApproved).Count() == 1));
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.Course.CourseTitle))
                    .ForMember(tr => tr.UserEmail, option => option.Ignore());
                    cfg.CreateMap <TestResultDetailDTO, TestResultDetailViewModel>()
                    .ForMember("Question", opt => opt.MapFrom(trd => trd.Question.QuestionText))
                    .ForMember("Topic", opt => opt.MapFrom(trd => trd.Question.Topic.TopicTitle));
                });
                IMapper iMapper = config.CreateMapper();

                // III. Set ViewBag properties.
                if (currentUserId != null)
                {
                    ViewBag.UserName = (await UserService.GetAsync(currentUserId)).UserName;
                }
                IEnumerable <TestResultDTO> testResultDTOs = TestResultService.Find(tr =>
                                                                                    tr.UserProfileId == currentUserId &&
                                                                                    !tr.IsTopicTest);  //.ToList();
                IEnumerable <TestResultViewModel> userTestResults = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(testResultDTOs);
                ViewBag.UserTestResults = userTestResults;

                // IV. Get data for a view.
                IEnumerable <CourseDTO>       source            = CourseService.Find(dto => dto.IsApproved);//.ToList();
                IEnumerable <CourseViewModel> courses           = iMapper.Map <IEnumerable <CourseDTO>, IEnumerable <CourseViewModel> >(source);
                IEnumerable <CourseViewModel> courseOrderedList = courses.Where(course =>
                                                                                course.IsSubscribed ||
                                                                                course.IsFree)
                                                                  .OrderBy(course => course.Name)
                                                                  .OrderByDescending(course => course.IsSubscribed);

                // V.
                return(View(courseOrderedList));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public override TestResult CreateActualTestResult(CustomerEventScreeningTestsEntity customerEventScreeningTestsEntity)
        {
            var customerEventReadingEntities = customerEventScreeningTestsEntity.CustomerEventReading.ToList();

            var testResult = new FloChecABITestResult(customerEventScreeningTestsEntity.CustomerEventScreeningTestId)
            {
                LeftResultReadings  = new FloChecABIReadings(),
                RightResultReadings = new FloChecABIReadings(),
                PencilDopplerUsed   = this.CreateResultReading((int)ReadingLabels.PencilDopplerUsed, customerEventReadingEntities),

                RepeatStudy = this.CreateResultReading((int)ReadingLabels.RepeatStudy, customerEventReadingEntities)
            };


            testResult.RightResultReadings.ABI = CreateResultReadingforNullableDecimal((int)ReadingLabels.RightABI, customerEventReadingEntities);
            testResult.LeftResultReadings.ABI  = CreateResultReadingforNullableDecimal((int)ReadingLabels.LeftABI, customerEventReadingEntities);

            testResult.RightResultReadings.BFI = CreateResultReadingforNullableDecimal((int)ReadingLabels.RightHandBFI, customerEventReadingEntities);
            testResult.LeftResultReadings.BFI  = CreateResultReadingforNullableDecimal((int)ReadingLabels.LeftHandBFI, customerEventReadingEntities);

            if (customerEventScreeningTestsEntity.TestMedia != null && customerEventScreeningTestsEntity.TestMedia.Count > 0)
            {
                var fileEntityCollection = customerEventScreeningTestsEntity.FileCollectionViaTestMedia.ToList();
                var testMediaEntity      = customerEventScreeningTestsEntity.TestMedia.FirstOrDefault();

                testResult.ResultImage = new ResultMedia(testMediaEntity.MediaId)
                {
                    File          = GetFileObjectfromEntity(testMediaEntity.FileId, fileEntityCollection),
                    Thumbnail     = testMediaEntity.ThumbnailFileId != null ? new File(testMediaEntity.ThumbnailFileId.Value) : null,
                    ReadingSource = testMediaEntity.IsManual ? ReadingSource.Manual : ReadingSource.Automatic
                };
            }

            var standardFindings         = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.FloChecABI);
            var standardFindingsLeftAbi  = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.FloChecABI, (int)ReadingLabels.LeftABI);
            var standardFindingsRightAbi = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.FloChecABI, (int)ReadingLabels.RightABI);

            var testResultService = new TestResultService();

            StandardFinding <decimal> leftResultFinding, rightResultFinding;

            leftResultFinding = rightResultFinding = null;

            if (standardFindings == null || standardFindings.Count < 1)
            {
                standardFindings = standardFindingsLeftAbi;
            }

            int findingId = 0;

            if (testResult.LeftResultReadings.ABI != null)
            {
                findingId         = testResultService.GetCalculatedStandardFinding(testResult.LeftResultReadings.ABI.Reading, (int)TestType.FloChecABI, standardFindingsLeftAbi != null && standardFindingsLeftAbi.Count() > 0 ? (int?)ReadingLabels.LeftABI : null);
                leftResultFinding = standardFindings.Where(f => f.Id == findingId).SingleOrDefault();
            }

            if (testResult.RightResultReadings.ABI != null)
            {
                findingId          = testResultService.GetCalculatedStandardFinding(testResult.RightResultReadings.ABI.Reading, (int)TestType.FloChecABI, standardFindingsRightAbi != null && standardFindingsRightAbi.Count() > 0 ? (int?)ReadingLabels.RightABI : null);
                rightResultFinding = standardFindings.Where(f => f.Id == findingId).SingleOrDefault();
            }
            if (standardFindingsLeftAbi == null || standardFindingsLeftAbi.Count() < 1)
            {
                var customerEventTestStandardFindingEntity = customerEventScreeningTestsEntity.CustomerEventTestStandardFinding.FirstOrDefault();

                if (customerEventTestStandardFindingEntity != null)
                {
                    var standardFindingTestReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventTestStandardFinding.LastOrDefault();

                    var standardFindingEntity = standardFindings.ToList().FindAll(standardFinding => standardFinding.Id == standardFindingTestReadingEntity.StandardFindingId).FirstOrDefault();

                    if (standardFindingEntity != null)
                    {
                        testResult.Finding = new StandardFinding <decimal>(standardFindingEntity.Id)
                        {
                            CustomerEventStandardFindingId = customerEventTestStandardFindingEntity.CustomerEventTestStandardFindingId,
                            Label    = standardFindingEntity.Label,
                            MaxValue = Convert.ToInt32(standardFindingEntity.MaxValue),
                            MinValue = Convert.ToInt32(standardFindingEntity.MinValue)
                        };
                    }
                }
                else
                {
                    testResult.Finding = GetFindingToConsider(leftResultFinding, rightResultFinding);

                    if (testResult.Finding != null)
                    {
                        var standardFinding = standardFindings.Find(finding => finding.Id == testResult.Finding.Id);
                        if (standardFinding != null)
                        {
                            testResult.Finding = standardFinding;
                        }
                    }
                }
            }
            else
            {
                var testReadingLAbiReading = customerEventReadingEntities.Where(customerEventReading => customerEventReading.TestReading.ReadingId == (int)ReadingLabels.LeftABI).SingleOrDefault();
                var testReadingRAbiReading = customerEventReadingEntities.Where(customerEventReading => customerEventReading.TestReading.ReadingId == (int)ReadingLabels.RightABI).SingleOrDefault();

                if (testReadingLAbiReading != null && testReadingLAbiReading.StandardFindingTestReadingId != null)
                {
                    var standardFindingReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventReading.ToList().Find(stdFindingTestReading =>
                                                                                                                                                                   stdFindingTestReading.TestId == (int)TestType.FloChecABI && stdFindingTestReading.ReadingId == (int)ReadingLabels.LeftABI);

                    if (standardFindingReadingEntity != null)
                    {
                        testResult.LeftResultReadings.Finding = new StandardFinding <decimal>(standardFindingReadingEntity.StandardFindingId);
                    }
                }
                else if (leftResultFinding != null)
                {
                    testResult.LeftResultReadings.Finding = leftResultFinding;
                }

                if (testResult.LeftResultReadings.Finding != null)
                {
                    testResult.LeftResultReadings.Finding = standardFindings.Where(sf => sf.Id == testResult.LeftResultReadings.Finding.Id).SingleOrDefault();
                }

                //-----------------------------------------------------------------------------------
                if (testReadingRAbiReading != null && testReadingRAbiReading.StandardFindingTestReadingId != null)
                {
                    var standardFindingReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventReading.ToList().Find(stdFindingTestReading =>
                                                                                                                                                                   stdFindingTestReading.TestId == (int)TestType.FloChecABI && stdFindingTestReading.ReadingId == (int)ReadingLabels.RightABI);

                    if (standardFindingReadingEntity != null)
                    {
                        testResult.RightResultReadings.Finding = new StandardFinding <decimal>(standardFindingReadingEntity.StandardFindingId);
                    }
                }
                else if (rightResultFinding != null)
                {
                    testResult.RightResultReadings.Finding = rightResultFinding;
                }

                if (testResult.RightResultReadings.Finding != null)
                {
                    testResult.RightResultReadings.Finding = standardFindings.Where(sf => sf.Id == testResult.RightResultReadings.Finding.Id).SingleOrDefault();
                }
            }

            return(testResult);
        }
예제 #7
0
        public override TestResult CreateActualTestResult(CustomerEventScreeningTestsEntity customerEventScreeningTestsEntity)
        {
            var customerEventReadingEntities = customerEventScreeningTestsEntity.CustomerEventReading.ToList();

            var testResult = new PADTestResult(customerEventScreeningTestsEntity.CustomerEventScreeningTestId)
            {
                LeftResultReadings  = new PadTestReadings(),
                RightResultReadings = new PadTestReadings(),
                PressureReadings    = new CardiovisionPressureReadings(),
                SystolicHighestArm  = this.CreateResultReadingforNullableInt((int)ReadingLabels.SystolicHighestArm, customerEventReadingEntities),
                PencilDopplerUsed   = this.CreateResultReading((int)ReadingLabels.PencilDopplerUsed, customerEventReadingEntities),
                RepeatStudy         = this.CreateResultReading((int)ReadingLabels.RepeatStudy, customerEventReadingEntities)
            };

            testResult.RightResultReadings.SystolicArm     = CreateResultReadingforNullableInt((int)ReadingLabels.SystolicRArm, customerEventReadingEntities);
            testResult.RightResultReadings.SystolicAnkle   = CreateResultReadingforNullableInt((int)ReadingLabels.SystolicRAnkle, customerEventReadingEntities);
            testResult.RightResultReadings.ABI             = CreateResultReadingforNullableDecimal((int)ReadingLabels.RightABI, customerEventReadingEntities);
            testResult.RightResultReadings.UnabletoOcclude = this.CreateResultReading((int)ReadingLabels.RightUnabletoOcclude, customerEventReadingEntities);

            testResult.LeftResultReadings.SystolicArm     = CreateResultReadingforNullableInt((int)ReadingLabels.SystolicLArm, customerEventReadingEntities);
            testResult.LeftResultReadings.SystolicAnkle   = CreateResultReadingforNullableInt((int)ReadingLabels.SystolicLAnkle, customerEventReadingEntities);
            testResult.LeftResultReadings.ABI             = CreateResultReadingforNullableDecimal((int)ReadingLabels.LeftABI, customerEventReadingEntities);
            testResult.LeftResultReadings.UnabletoOcclude = this.CreateResultReading((int)ReadingLabels.LeftUnabletoOcclude, customerEventReadingEntities);


            var standardFindings         = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.PAD);
            var standardFindingsLeftAbi  = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.PAD, (int)ReadingLabels.LeftABI);
            var standardFindingsRightAbi = new TestResultService().GetAllStandardFindings <decimal>((int)TestType.PAD, (int)ReadingLabels.RightABI);

            var testResultService = new TestResultService();

            StandardFinding <decimal> leftResultFinding, rightResultFinding;

            leftResultFinding = rightResultFinding = null;

            if (standardFindings == null || standardFindings.Count < 1)
            {
                standardFindings = standardFindingsLeftAbi;
            }

            int findingId = 0;

            if (testResult.LeftResultReadings.ABI != null)
            {
                findingId         = testResultService.GetCalculatedStandardFinding(testResult.LeftResultReadings.ABI.Reading, (int)TestType.PAD, standardFindingsLeftAbi != null && standardFindingsLeftAbi.Count() > 0 ? (int?)ReadingLabels.LeftABI : null);
                leftResultFinding = standardFindings.Where(f => f.Id == findingId).SingleOrDefault();
            }

            if (testResult.RightResultReadings.ABI != null)
            {
                findingId          = testResultService.GetCalculatedStandardFinding(testResult.RightResultReadings.ABI.Reading, (int)TestType.PAD, standardFindingsRightAbi != null && standardFindingsRightAbi.Count() > 0 ? (int?)ReadingLabels.RightABI : null);
                rightResultFinding = standardFindings.Where(f => f.Id == findingId).SingleOrDefault();
            }
            if (standardFindingsLeftAbi == null || standardFindingsLeftAbi.Count() < 1)
            {
                var customerEventTestStandardFindingEntity = customerEventScreeningTestsEntity.CustomerEventTestStandardFinding.FirstOrDefault();

                if (customerEventTestStandardFindingEntity != null)
                {
                    var standardFindingTestReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventTestStandardFinding.LastOrDefault();

                    var standardFindingEntity = standardFindings.ToList().FindAll(standardFinding => standardFinding.Id == standardFindingTestReadingEntity.StandardFindingId).FirstOrDefault();

                    if (standardFindingEntity != null)
                    {
                        testResult.Finding = new StandardFinding <decimal>(standardFindingEntity.Id)
                        {
                            CustomerEventStandardFindingId = customerEventTestStandardFindingEntity.CustomerEventTestStandardFindingId,
                            Label    = standardFindingEntity.Label,
                            MaxValue = Convert.ToInt32(standardFindingEntity.MaxValue),
                            MinValue = Convert.ToInt32(standardFindingEntity.MinValue)
                        };
                    }
                }
                else
                {
                    testResult.Finding = GetFindingToConsider(leftResultFinding, rightResultFinding);

                    if (testResult.Finding != null)
                    {
                        var standardFinding = standardFindings.Find(finding => finding.Id == testResult.Finding.Id);
                        if (standardFinding != null)
                        {
                            testResult.Finding = standardFinding;
                        }
                    }
                }
            }
            else
            {
                var testReadingLAbiReading = customerEventReadingEntities.Where(customerEventReading => customerEventReading.TestReading.ReadingId == (int)ReadingLabels.LeftABI).SingleOrDefault();
                var testReadingRAbiReading = customerEventReadingEntities.Where(customerEventReading => customerEventReading.TestReading.ReadingId == (int)ReadingLabels.RightABI).SingleOrDefault();

                if (testReadingLAbiReading != null && testReadingLAbiReading.StandardFindingTestReadingId != null)
                {
                    var standardFindingReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventReading.ToList().Find(stdFindingTestReading =>
                                                                                                                                                                   stdFindingTestReading.TestId == (int)TestType.PAD && stdFindingTestReading.ReadingId == (int)ReadingLabels.LeftABI);

                    if (standardFindingReadingEntity != null)
                    {
                        testResult.LeftResultReadings.Finding = new StandardFinding <decimal>(standardFindingReadingEntity.StandardFindingId);
                    }
                }
                else if (leftResultFinding != null)
                {
                    testResult.LeftResultReadings.Finding = leftResultFinding;
                }

                if (testResult.LeftResultReadings.Finding != null)
                {
                    testResult.LeftResultReadings.Finding = standardFindings.Where(sf => sf.Id == testResult.LeftResultReadings.Finding.Id).SingleOrDefault();
                }

                //-----------------------------------------------------------------------------------
                if (testReadingRAbiReading != null && testReadingRAbiReading.StandardFindingTestReadingId != null)
                {
                    var standardFindingReadingEntity = customerEventScreeningTestsEntity.StandardFindingTestReadingCollectionViaCustomerEventReading.ToList().Find(stdFindingTestReading =>
                                                                                                                                                                   stdFindingTestReading.TestId == (int)TestType.PAD && stdFindingTestReading.ReadingId == (int)ReadingLabels.RightABI);

                    if (standardFindingReadingEntity != null)
                    {
                        testResult.RightResultReadings.Finding = new StandardFinding <decimal>(standardFindingReadingEntity.StandardFindingId);
                    }
                }
                else if (rightResultFinding != null)
                {
                    testResult.RightResultReadings.Finding = rightResultFinding;
                }

                if (testResult.RightResultReadings.Finding != null)
                {
                    testResult.RightResultReadings.Finding = standardFindings.Where(sf => sf.Id == testResult.RightResultReadings.Finding.Id).SingleOrDefault();
                }
            }


            return(testResult);
        }
        // Course topics list.
        public async Task <ActionResult> CourseTopics(int?id)
        {
            try
            {
                // I.Checks.
                // Check id.
                if (!int.TryParse(id.ToString(), out int intId))
                {
                    return(RedirectToAction("Index"));
                }
                // Get courseDTO object.
                CourseDTO courseDTO = await CourseService.GetAsync(intId);

                if (courseDTO == null)
                {
                    return(RedirectToAction("Index"));
                }

                // II. AutoMapper Setup.
                var config = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.TopicTitle));
                    cfg.CreateMap <TestResultDetailDTO, TestResultDetailViewModel>()
                    .ForMember("Question", opt => opt.MapFrom(trd => trd.Question.QuestionText))
                    .ForMember("Topic", opt => opt.MapFrom(trd => trd.Question.Topic.TopicTitle));
                    cfg.CreateMap <TopicDTO, TopicViewModel>()
                    .ForMember("ID", opt => opt.MapFrom(obj => obj.TopicId))
                    .ForMember("Name", opt => opt.MapFrom(obj => obj.TopicTitle));
                });
                IMapper iMapper = config.CreateMapper();

                // III. Set ViewBag properties.
                // Get a role name for the current user.
                string currentUserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
                if (currentUserId != null)
                {
                    ViewBag.RoleName = UserService.FindUserRoleById(currentUserId);
                }
                else
                {
                    ViewBag.RoleName = null;
                }
                // Check: is this user subscribed to this course?
                SubscriptionDTO activeSubscription = SubscriptionService.Find(obj =>
                                                                              obj.UserProfileId == currentUserId &&
                                                                              obj.CourseId == intId &&
                                                                              (DateTime.Now - obj.StartDate < TimeSpan.FromDays(obj.SubscriptionPeriod)))
                                                     .FirstOrDefault();
                ViewBag.IsInApproving = false;
                ViewBag.IsSubscribed  = false;
                if (activeSubscription != null)
                {
                    if (activeSubscription.IsApproved)
                    {
                        ViewBag.IsSubscribed = true;
                    }
                    else
                    {
                        ViewBag.IsInApproving = true;
                    }
                }
                ViewBag.ParentId       = intId;
                ViewBag.CourseName     = courseDTO.CourseTitle;
                ViewBag.ParentParentId = courseDTO.SpecialityId;
                IEnumerable <TestResultDTO> testResultDTOs = TestResultService.Find(tr => tr.UserProfileId == currentUserId &&
                                                                                    tr.IsTopicTest);
                IEnumerable <TestResultViewModel> userTestResults = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(testResultDTOs);
                ViewBag.UserTestResults = userTestResults;
                ViewBag.AttemptsNumber  = courseDTO.AttemptsNumber;

                // IV. Get data for a view.
                List <TopicDTO> source = TopicService.Find(dto => dto.CourseId == intId).OrderBy(o => o.TopicNumber).ToList();
                IEnumerable <TopicViewModel> topicOrderedList = iMapper.Map <IEnumerable <TopicDTO>, IEnumerable <TopicViewModel> >(source);

                // VI.
                return(View(topicOrderedList));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        // Speciality courses list.
        public async Task <ActionResult> SpecialityCourses(int?id)
        {
            try
            {
                // I.Checks.
                // Check id.
                if (!int.TryParse(id.ToString(), out int intId))
                {
                    return(RedirectToAction("Index"));
                }
                // Get SpecialityDTO object.
                SpecialityDTO specialityDTO = await SpecialityService.GetAsync(intId);

                if (specialityDTO == null)
                {
                    return(RedirectToAction("Index"));
                }

                // II. AutoMapper Setup.
                // Get Id for the current user.
                string currentUserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
                var    config        = new MapperConfiguration(cfg =>
                {
                    cfg.CreateMap <CourseDTO, CourseViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(obj => obj.CourseId))
                    .ForMember("Name", opt => opt.MapFrom(obj => obj.CourseTitle))
                    .ForMember("IsSubscribed", opt => opt.MapFrom(course =>
                                                                  course.Subscriptions.Where(subscription =>
                                                                                             currentUserId != null &&
                                                                                             subscription.UserProfileId == currentUserId &&
                                                                                             subscription.CourseId == course.CourseId &&
                                                                                             (DateTime.Now - subscription.StartDate < TimeSpan.FromDays(subscription.SubscriptionPeriod)) &&
                                                                                             subscription.IsApproved).Count() == 1))
                    .ForMember("IsInApproving", opt => opt.MapFrom(course =>
                                                                   course.Subscriptions.Where(subscription =>
                                                                                              currentUserId != null &&
                                                                                              subscription.UserProfileId == currentUserId &&
                                                                                              subscription.CourseId == course.CourseId &&
                                                                                              (DateTime.Now - subscription.StartDate < TimeSpan.FromDays(subscription.SubscriptionPeriod)) &&
                                                                                              !subscription.IsApproved).Count() == 1));
                    cfg.CreateMap <TestResultDTO, TestResultViewModel>()
                    .ForMember("Id", opt => opt.MapFrom(tr => tr.TestResultId))
                    .ForMember("TestTitle", opt => opt.MapFrom(tr => tr.TestResultDetails.FirstOrDefault().Question.Topic.Course.CourseTitle));
                    cfg.CreateMap <TestResultDetailDTO, TestResultDetailViewModel>()
                    .ForMember("Question", opt => opt.MapFrom(trd => trd.Question.QuestionText))
                    .ForMember("Topic", opt => opt.MapFrom(trd => trd.Question.Topic.TopicTitle));
                });
                IMapper iMapper = config.CreateMapper();

                // III. Set ViewBag properties.
                // Get a role name for the current user.
                if (currentUserId != null)
                {
                    ViewBag.RoleName = UserService.FindUserRoleById(currentUserId);
                }
                else
                {
                    ViewBag.RoleName = null;
                }
                ViewBag.ParentId       = intId;
                ViewBag.SpecialityName = specialityDTO.SpecialityName;
                ViewBag.ParentParentId = specialityDTO.SubjectId;
                IEnumerable <TestResultDTO> testResultDTOs = TestResultService.Find(tr =>
                                                                                    tr.UserProfileId == currentUserId &&
                                                                                    !tr.IsTopicTest);
                IEnumerable <TestResultViewModel> userTestResults = iMapper.Map <IEnumerable <TestResultDTO>, IEnumerable <TestResultViewModel> >(testResultDTOs);
                ViewBag.UserTestResults = userTestResults;

                // IV. Get data for a view.
                IEnumerable <CourseDTO> source = CourseService.Find(dto => dto.SpecialityId == intId && dto.IsApproved)
                                                 .OrderBy(o => o.CourseTitle).OrderByDescending(o => o.IsFree);
                IEnumerable <CourseViewModel> courseOrderedList = iMapper.Map <IEnumerable <CourseDTO>, IEnumerable <CourseViewModel> >(source);

                // V.
                return(View(courseOrderedList));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }