/// <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); }
/// <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) { }
public TimeRangeData(WorklistTimeRange tr) { this.Start = tr.Start == null ? null : new TimePointData(tr.Start); this.End = tr.End == null ? null : new TimePointData(tr.End); }