Exemple #1
0
			/// <summary>
			/// Constructor
			/// </summary>
			/// <param name="timeField"></param>
			/// <param name="defaultRange"></param>
			/// <param name="ordering"></param>
			/// <param name="honourOrderPriority"> </param>
			public TimeDirective(WorklistItemField timeField, WorklistTimeRange defaultRange, WorklistOrdering ordering, bool honourOrderPriority)
			{
				this.TimeField = timeField;
				this.Ordering = ordering;
				this.DefaultRange = defaultRange;
				this.HonourOrderPriority = honourOrderPriority;
			}
        private List <WorklistItemSearchCriteria> BuildAdvancedProcedureSearchCriteria(WorklistItemTextQueryRequest request)
        {
            Platform.CheckMemberIsSet(request.SearchFields, "SearchFields");

            var searchParams = request.SearchFields;


            var wheres = new List <WorklistItemSearchCriteria>();

            // construct a base criteria object from the request values
            var criteria = new WorklistItemSearchCriteria();

            ApplyStringCriteria(criteria.PatientProfile.Mrn.Id, searchParams.Mrn, ShouldUseExactMatchingOnIdentifiers(request));
            ApplyStringCriteria(criteria.PatientProfile.Name.FamilyName, searchParams.FamilyName);
            ApplyStringCriteria(criteria.PatientProfile.Name.GivenName, searchParams.GivenName);
            ApplyStringCriteria(criteria.PatientProfile.Healthcard.Id, searchParams.HealthcardNumber, ShouldUseExactMatchingOnIdentifiers(request));
            ApplyStringCriteria(criteria.Order.AccessionNumber, searchParams.AccessionNumber, ShouldUseExactMatchingOnIdentifiers(request));

            if (searchParams.OrderingPractitionerRef != null)
            {
                var orderedBy = _context.Load <ExternalPractitioner>(searchParams.OrderingPractitionerRef, EntityLoadFlags.Proxy);
                criteria.Order.OrderingPractitioner.EqualTo(orderedBy);
            }

            if (searchParams.DiagnosticServiceRef != null)
            {
                var ds = _context.Load <DiagnosticService>(searchParams.DiagnosticServiceRef, EntityLoadFlags.Proxy);
                criteria.Order.DiagnosticService.EqualTo(ds);
            }

            if (searchParams.ProcedureTypeRef != null)
            {
                var pt = _context.Load <ProcedureType>(searchParams.ProcedureTypeRef, EntityLoadFlags.Proxy);
                criteria.Procedure.Type.EqualTo(pt);
            }

            if (searchParams.FromDate != null || searchParams.UntilDate != null)
            {
                // the goal here is to use the date-range in an approximate fashion, to search for procedures
                // that were performed "around" that time-frame
                // therefore, the date-range is applied to muliple dates, and these are OR'd

                // use "day" resolution on the start and end times, because we don't care about time
                var start = searchParams.FromDate == null ? null
                                        : new WorklistTimePoint(searchParams.FromDate.Value, WorklistTimePoint.Resolutions.Day);
                var end = searchParams.UntilDate == null ? null
                                        : new WorklistTimePoint(searchParams.UntilDate.Value, WorklistTimePoint.Resolutions.Day);

                var dateRange = new WorklistTimeRange(start, end);
                var now       = Platform.Time;

                var procSchedDateCriteria = (WorklistItemSearchCriteria)criteria.Clone();
                dateRange.Apply((ISearchCondition)procSchedDateCriteria.Procedure.ScheduledStartTime, now);
                wheres.Add(procSchedDateCriteria);

                var procStartDateCriteria = (WorklistItemSearchCriteria)criteria.Clone();
                dateRange.Apply((ISearchCondition)procStartDateCriteria.Procedure.StartTime, now);
                wheres.Add(procStartDateCriteria);

                var procEndDateCriteria = (WorklistItemSearchCriteria)criteria.Clone();
                dateRange.Apply((ISearchCondition)procEndDateCriteria.Procedure.EndTime, now);
                wheres.Add(procEndDateCriteria);
            }
            else
            {
                // no date range, so just need a single criteria
                wheres.Add(criteria);
            }

            return(wheres);
        }
Exemple #3
0
			/// <summary>
			/// Constructor
			/// </summary>
			/// <param name="timeField"></param>
			/// <param name="defaultRange"></param>
			/// <param name="ordering"></param>
			public TimeDirective(WorklistItemField timeField, WorklistTimeRange defaultRange, WorklistOrdering ordering)
				:this(timeField, defaultRange, ordering, false)
			{
			}
Exemple #4
0
 public TimeRangeData(WorklistTimeRange tr)
 {
     this.Start = tr.Start == null ? null : new TimePointData(tr.Start);
     this.End   = tr.End == null ? null : new TimePointData(tr.End);
 }