public HafModel Get(HafFilter filter)
        {
            var theEvent = _eventRepository.GetById(filter.EventId);

            if (!theEvent.HealthAssessmentTemplateId.HasValue || theEvent.HealthAssessmentTemplateId.Value <= 0)
            {
                return(null);
            }

            var customer = _customerRepository.GetCustomer(filter.CustomerId);

            var template           = _healthAssessmentTemplateRepository.GetById(theEvent.HealthAssessmentTemplateId.Value);
            var genericQuestionIds = new List <long>();
            var list = new List <KeyValuePair <long, List <long> > >();

            IsFemale = customer.Gender == Gender.Female;

            //Get Generic Question from Event Templates
            genericQuestionIds.AddRange(template.QuestionIds);

            var order          = _orderRepository.GetOrder(filter.CustomerId, filter.EventId);
            var eventpackageId = order.OrderDetails.Where(od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess && od.OrderItem.OrderItemType == OrderItemType.EventPackageItem).Select(od => od.OrderItem.ItemId).FirstOrDefault();

            var isKynIntegrationEnabled = _eventPodRepository.IsKynIntegrationEnabled(filter.EventId);
            var eventTestIds            = new List <long>();

            if (eventpackageId > 0)
            {
                var eventPackage = _eventPackageRepository.GetById(eventpackageId);

                if (eventPackage.HealthAssessmentTemplateId.HasValue && eventPackage.HealthAssessmentTemplateId.Value > 0)
                {
                    var packageTemplate = _healthAssessmentTemplateRepository.GetById(eventPackage.HealthAssessmentTemplateId.Value);
                    genericQuestionIds.AddRange(packageTemplate.QuestionIds);
                }

                eventTestIds.AddRange(eventPackage.Tests.Select(t => t.Id));
            }
            list.Add(new KeyValuePair <long, List <long> >(0, genericQuestionIds));

            eventTestIds.AddRange(order.OrderDetails.Where(od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess && od.OrderItem.OrderItemType == OrderItemType.EventTestItem).Select(od => od.OrderItem.ItemId));
            var eventTests = _eventTestRepository.GetbyIds(eventTestIds);

            var testWiseQuestion = GetTestQuestionKeyValuePairs(eventTestIds, isKynIntegrationEnabled, eventTests);

            if (testWiseQuestion != null)
            {
                list.AddRange(testWiseQuestion);
            }

            var hafModel = GetHafModel(list, eventTests, filter.EventId, filter.CustomerId, filter.SetChildQuestion, filter.VersionNumber) ?? new HafModel();

            hafModel.EventId    = filter.EventId;
            hafModel.CustomerId = filter.CustomerId;
            return(hafModel);
        }
예제 #2
0
        public CustomerClinicalQuestionEditModel Get(string guid, long customerId, long eventId, long clinicalQuestionTemplateId, long eventCustomerId = 0)
        {
            var template = _healthAssessmentTemplateRepository.GetById(clinicalQuestionTemplateId);

            var questions = _healthAssessmentRepository.GetByIds(template.QuestionIds);

            var questionModelCollection = Mapper.Map <IEnumerable <HealthAssessmentQuestion>, IEnumerable <HealthAssessmentQuestionEditModel> >(questions);

            var answers = _clinicalQuestionAnswerRepository.GetCustomerClinicalQuestionAnswers(guid, customerId);

            if (answers.IsNullOrEmpty() && eventCustomerId > 0)
            {
                answers = null;
                var hafAnswers = _healthAssessmentRepository.GetAnswerByEventCustomerId(eventCustomerId);
                foreach (var answer in hafAnswers)
                {
                    var editModel = questionModelCollection.SingleOrDefault(q => q.QuestionId == answer.QuestionId);
                    if (editModel != null)
                    {
                        editModel.Answer = answer.Answer;
                    }
                }
            }

            if (answers != null)
            {
                foreach (var answer in answers)
                {
                    var editModel = questionModelCollection.SingleOrDefault(q => q.QuestionId == answer.ClinicalHealthQuestionId);
                    if (editModel != null)
                    {
                        editModel.Answer = answer.HealthQuestionAnswer;
                    }
                }
            }
            var healthAssessmentModel = new HealthAssessmentEditModel
            {
                CustomerId         = customerId,
                EventId            = eventId,
                QuestionEditModels = questionModelCollection
            };

            _clinicalQuestionsHealthAssessmentHelper.SetRecommendationLogic(clinicalQuestionTemplateId, healthAssessmentModel);
            var model = new CustomerClinicalQuestionEditModel
            {
                HealthAssessmentModel      = healthAssessmentModel,
                ClinicalQuestionTemplateId = clinicalQuestionTemplateId,
                Guid = guid
            };

            return(model);
        }
예제 #3
0
        public ActionResult SetTemplateIsActiveState(long templateId, bool isActive)
        {
            var template = _healthAssessmentTemplateRepository.GetById(templateId);

            if (template.IsDefault && template.IsPublished && template.TemplateType.HasValue && template.TemplateType.Value == (long)HealthAssessmentTemplateType.Event)
            {
                return(Json(new { IsSuccess = false, Message = "Template can not be deactivated since it default template for event. To deactivate it, Please make another template as default and publish it." }, JsonRequestBehavior.AllowGet));
            }

            template.IsActive = isActive;
            _healthAssessmentTemplateRepository.Save(template);
            return(Json(new { IsSuccess = true, Message = isActive ? "Template activated successfully." : "Template deactivated successfully." }, JsonRequestBehavior.AllowGet));
        }
        public bool CheckifNameisUnique(HealthAssessmentTemplateEditModel model, string templateName)
        {
            if (model.Id > 0)
            {
                var inDb = _templateRepository.GetById(model.Id);
                if (inDb.Name == templateName)
                {
                    return(true);
                }
            }

            if (string.IsNullOrEmpty(templateName))
            {
                return(false);
            }

            var template = _templateRepository.GetByName(templateName.Trim());

            if (template != null)
            {
                return(false);
            }

            return(true);
        }
예제 #5
0
        public IEnumerable <ClinicalTestQualificationCriteriaEditModel> Get(long templateId)
        {
            var template          = _healthAssessmentTemplateRepository.GetById(templateId);
            var criterias         = _clinicalTestQualificationCriteriaRepository.GetbyTemplateId(templateId);
            var criteriaEditModel = Mapper.Map <IEnumerable <ClinicalTestQualificationCriteria>, IEnumerable <ClinicalTestQualificationCriteriaEditModel> >(criterias);

            return(criteriaEditModel);
        }
        public HealthAssessmentTemplateEditModel SaveTemplate(HealthAssessmentTemplateEditModel model, long organizationRoleUserId)
        {
            HealthAssessmentTemplate templateinDb = null;

            var template = Mapper.Map <HealthAssessmentTemplateEditModel, HealthAssessmentTemplate>(model);

            if (template.Id > 0)
            {
                templateinDb = _healthAssessmentTemplateRepository.GetById(template.Id);
                template.DataRecorderMetaData = templateinDb.DataRecorderMetaData;
                template.DataRecorderMetaData.DateModified         = DateTime.Now;
                template.DataRecorderMetaData.DataRecorderModifier = new OrganizationRoleUser(organizationRoleUserId);
                if (!templateinDb.IsPublished && template.IsPublished)
                {
                    template.PublicationDate = DateTime.Now;
                }
            }
            else
            {
                template.DataRecorderMetaData = new DataRecorderMetaData(organizationRoleUserId, DateTime.Now, null);
                if (template.IsPublished)
                {
                    template.PublicationDate = DateTime.Now;
                }
            }

            using (var scope = new TransactionScope())
            {
                template = _healthAssessmentTemplateRepository.Save(template);
                scope.Complete();
            }

            model.Id = template.Id;

            return(model);
        }
예제 #7
0
        private IEnumerable <ClinicalTestQualificationCriteriaEditModel> SetTotalNumberOfQuestionAndGroupName(IEnumerable <ClinicalTestQualificationCriteriaEditModel> criterias, long templateId, IEnumerable <HealthAssessmentQuestionGroup> groups)
        {
            var template            = _healthAssessmentTemplateRepository.GetById(templateId);
            var selectedQuestionIds = template.QuestionIds;
            var finalCriteriaModel  = new List <ClinicalTestQualificationCriteriaEditModel>();

            foreach (var healthAssessmentQuestionGroup in groups)
            {
                var parentQuestion = healthAssessmentQuestionGroup.Questions.Where(x => selectedQuestionIds.Contains(x.Id) && x.ParentQuestionId != null);
                int count          = 0;
                if (parentQuestion.IsNullOrEmpty())
                {
                    count = healthAssessmentQuestionGroup.Questions.Count(x => selectedQuestionIds.Contains(x.Id));
                }
                else
                {
                    var parentQuestionIds = parentQuestion.Select(x => x.ParentQuestionId).Distinct();

                    foreach (var questionId in parentQuestionIds)
                    {
                        var tempCount = healthAssessmentQuestionGroup.Questions.Count(x => x.ParentQuestionId == questionId);
                        if (count > tempCount || count == 0)
                        {
                            count = tempCount;
                        }
                    }
                }

                var criteira = criterias.Single(x => x.TestId == healthAssessmentQuestionGroup.TestId);
                criteira.TotalQuestionCount = count;
                criteira.GroupName          = healthAssessmentQuestionGroup.Name;
                finalCriteriaModel.Add(criteira);
            }

            return(finalCriteriaModel);
        }
예제 #8
0
        public void SetRecommendationLogic(long templateId, HealthAssessmentEditModel model)
        {
            var critarias           = _clinicalTestQualificationCriteriaRepository.GetbyTemplateId(templateId);
            var critariasViewModels = Mapper.Map <IEnumerable <ClinicalTestQualificationCriteria>, IEnumerable <ClinicalTestQualificationCriteriaViewModel> >(critarias);
            var clinicalGroups      = _healthAssessmentRepository.GetAllQuestionGroupWithQuestion(true);
            var template            = _healthAssessmentTemplateRepository.GetById(templateId);

            CompleteClinicalQuestionCriteriaInfo(critariasViewModels, clinicalGroups, template.QuestionIds);

            if (!critariasViewModels.IsNullOrEmpty())
            {
                //Osteoporosis
                var recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.OsteoTestIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.BoneDensityRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                //Peripheral Arterial Disease (PAD)/A/B Index
                recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.PadTestIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.ABIndexRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                //AAA
                recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.AaaTestIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.AAARecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                //Stroke/Carotid Artery Ultrasound
                recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.StrokeTesIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.CarotidRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                //Echocardiogram
                recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.EchoTestIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.EchocardiogramRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => TestGroup.SpiroTestIds.Contains(x.TestId));
                if (recommendation != null)
                {
                    model.SpirometryRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.IFOBT);
                if (recommendation != null)
                {
                    model.IFOBTRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.HcpCaDiabetesPanel);
                if (recommendation != null)
                {
                    model.DiabetesPanelRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.HcpCaBmp);
                if (recommendation != null)
                {
                    model.BmpRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.HcpCaLipidProfile);
                if (recommendation != null)
                {
                    model.LipidProfileRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.HcpCaMicroAlbuminCreatinine);
                if (recommendation != null)
                {
                    model.MicroAlbuminCreatinineRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }

                recommendation = critariasViewModels.FirstOrDefault(x => x.TestId == (long)TestType.HcpCaHepatitisC);
                if (recommendation != null)
                {
                    model.HepatitisCRecommendationLogic = new QualificationRecommendationLogic
                    {
                        RecommendationLogic   = recommendation.ToString(),
                        DisqualificationLogic = recommendation.DisqualificationLogic
                    };
                }
            }
        }