public virtual PeriodEventsInfo GetPeriodEvents(int periodId, PeriodEventsInputInfo periodEventsInputModel)
        {
            var period = _periodRepository
                         .Get(p => p.Id == periodId,
                              p => p.CompletedEvents.Select(e => e.Clinician.Specialty),
                              p => p.CompletedEvents.Select(e => e.Name))
                         .FirstOrDefault();

            if (period != null)
            {
                var completedEvents = period.CompletedEvents
                                      .Where(
                    completedEvent =>
                    IsCompletedEventMatched(completedEvent, periodEventsInputModel.PeriodEventsFilterInputInfo))
                                      .ToList();

                var lastCompletedEvent = completedEvents.LastOrDefault();

                IEnumerable <EventMilestone> eventMilestones = null;
                if (lastCompletedEvent != null && lastCompletedEvent.IsActive)
                {
                    eventMilestones = _eventMilestoneRepository
                                      .Get(eventMilestone =>
                                           eventMilestone.CompletedEvent.Id == lastCompletedEvent.Id &&
                                           eventMilestone.IsMandatory,
                                           eventMilestone => eventMilestone.Name)
                                      .Where(eventMilestone =>
                                             eventMilestone.BreachDate != null &&
                                             IsEventMilestoneMatched(eventMilestone, periodEventsInputModel.PeriodEventsFilterInputInfo));
                }
                var periodEventsInfo = GetPeriodEventsInfo(completedEvents, eventMilestones, period.GetType().Name);
                if (periodEventsInfo != null)
                {
                    var periodEventsInfoList = periodEventsInfo.ToList();
                    var orderedEvents        = OrderPeriodEventsByProperty(periodEventsInfoList, periodEventsInputModel.ListInputInfo);

                    return(new PeriodEventsInfo
                    {
                        Events = (periodEventsInputModel.ListInputInfo == null || periodEventsInputModel.ListInputInfo.Index == null || periodEventsInputModel.ListInputInfo.PageCount == null)
                                ? orderedEvents
                                : orderedEvents
                                 .Skip(((int)periodEventsInputModel.ListInputInfo.Index - 1) * (int)periodEventsInputModel.ListInputInfo.PageCount)
                                 .Take((int)periodEventsInputModel.ListInputInfo.PageCount),
                        TotalNumberOfEvents = periodEventsInfoList.Count(),
                        IsBreached = period.GetDaysRemainingAt(_clock.TodayDate) < 0
                    });
                }
            }

            return(null);
        }
示例#2
0
 public virtual PeriodEventsInfo GetPeriodEvents(RoleData role, int periodId, PeriodEventsInputInfo periodEventsInputModel)
 {
     return(_patientApplicationService.GetPeriodEvents(periodId, periodEventsInputModel));
 }