public ActionResult PhysicianTestReview(PhysicianTestReviewListModelFilter filter = null, int pageNumber = 1)
        {
            var filterValidator = IoC.Resolve <PhysicianTestReviewListModelFilterValidator>();
            var result          = filterValidator.Validate(filter);

            if (result.IsValid)
            {
                int totalRecords = 0;

                var model = _physicianEvaluationService.GetPhysicianTestReview(pageNumber, _pageSize, filter, out totalRecords);
                if (model == null)
                {
                    model = new PhysicianTestReviewListModel();
                }
                model.Filter = filter;

                var currentAction = ControllerContext.RouteData.Values["action"].ToString();

                Func <int, string> urlFunc =
                    pn => Url.Action(currentAction, new
                {
                    pageNumber = pn,
                    filter.EventId,
                    filter.FromDate,
                    filter.ToDate,
                    filter.DateType,
                    filter.PhysicianId,
                    filter.PodId,
                    filter.IsRetailEvent,
                    filter.IsCorporateEvent,
                    filter.IsPublicEvent,
                    filter.IsPrivateEvent
                });
                model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc);
                return(View(model));
            }

            var propertyNames = result.Errors.Select(e => e.PropertyName).Distinct();
            var htmlString    = propertyNames.Aggregate("", (current, property) => current + (result.Errors.Where(e => e.PropertyName == property).FirstOrDefault().ErrorMessage + "<br />"));

            return(View(new PhysicianTestReviewListModel {
                Filter = filter, FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(htmlString)
            }));
        }
Exemple #2
0
        public IEnumerable <long> GetPhysicianIdsForTestReviewed(int pageNumber, int pageSize, PhysicianTestReviewListModelFilter filter, out int totalRecords)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(adapter);

                if (filter == null)
                {
                    filter = new PhysicianTestReviewListModelFilter();
                }

                IQueryable <long> queryPhysicianIds;

                if (filter.IsBlank())
                {
                    queryPhysicianIds = from p in linqMetaData.PhysicianProfile select p.PhysicianId;
                }
                else
                {
                    var query = (from pe in linqMetaData.PhysicianEvaluation
                                 join ec in linqMetaData.EventCustomers on pe.EventCustomerId equals
                                 ec.EventCustomerId
                                 join e in linqMetaData.Events on ec.EventId equals e.EventId
                                 where pe.EvaluationEndTime.HasValue
                                 select new { pe, e });

                    if (filter.PhysicianId > 0)
                    {
                        query = query.Where(q => q.pe.PhysicianId == filter.PhysicianId);
                    }

                    if (filter.EventId > 0)
                    {
                        query = query.Where(q => q.e.EventId == filter.EventId);
                    }
                    else
                    {
                        if (filter.DateType == (int)PhysicianReviewDateTypeFilter.EventDate)
                        {
                            if (filter.FromDate.HasValue)
                            {
                                query = query.Where(a => a.e.EventDate >= filter.FromDate.Value);
                            }

                            if (filter.ToDate.HasValue)
                            {
                                query =
                                    query.Where(
                                        a => a.e.EventDate < filter.ToDate.Value.AddHours(23).AddMinutes(59));
                            }
                        }
                        else if (filter.DateType == (int)PhysicianReviewDateTypeFilter.EvaluationDate)
                        {
                            if (filter.FromDate.HasValue)
                            {
                                query = query.Where(a => a.pe.EvaluationStartTime >= filter.FromDate.Value);
                            }

                            if (filter.ToDate.HasValue)
                            {
                                query =
                                    query.Where(
                                        a => a.pe.EvaluationStartTime < filter.ToDate.Value.AddHours(23).AddMinutes(59));
                            }
                        }

                        if (filter.PodId > 0)
                        {
                            var eventIds = (from ep in linqMetaData.EventPod
                                            where ep.PodId == filter.PodId && ep.IsActive
                                            select ep.EventId);
                            query = query.Where(q => eventIds.Contains(q.e.EventId));
                        }

                        if (filter.IsRetailEvent && !filter.IsCorporateEvent)
                        {
                            var eventIds = (from ea in linqMetaData.EventAccount
                                            select ea.EventId);
                            query = query.Where(q => !eventIds.Contains(q.e.EventId));
                        }
                        else if (!filter.IsRetailEvent && filter.IsCorporateEvent)
                        {
                            var eventIds = (from ea in linqMetaData.EventAccount
                                            select ea.EventId);
                            query = query.Where(q => eventIds.Contains(q.e.EventId));
                        }

                        if (filter.IsPublicEvent && !filter.IsPrivateEvent)
                        {
                            query = query.Where(q => q.e.EventTypeId == (long)RegistrationMode.Public);
                        }
                        else if (!filter.IsPublicEvent && filter.IsPrivateEvent)
                        {
                            query = query.Where(q => q.e.EventTypeId == (long)RegistrationMode.Private);
                        }
                    }

                    queryPhysicianIds = (from q in query orderby q.pe.PhysicianId select q.pe.PhysicianId);
                }

                totalRecords = queryPhysicianIds.Distinct().Count();
                return(queryPhysicianIds.Distinct().TakePage(pageNumber, pageSize).ToArray());
            }
        }