/// <summary> /// Initializes this object. /// </summary> /// <param name="procedureStepClasses"></param> /// <param name="criteria"></param> /// <param name="projection"></param> /// <param name="page"></param> protected void Initialize(Type[] procedureStepClasses, WorklistItemSearchCriteria[] criteria, WorklistItemProjection projection, SearchResultPage page) { this.Criteria = criteria; this.Projection = projection; this.Page = page; this.ProcedureStepClasses = procedureStepClasses; }
private List <WorklistItemSearchCriteria> BuildTextQueryStaffSearchCriteria(WorklistItemTextQueryRequest request) { var query = request.TextQuery; // this will hold all criteria var criteria = new List <WorklistItemSearchCriteria>(); // build criteria against names var names = ParsePersonNames(query); // scheduled performer criteria.AddRange(CollectionUtils.Map(names, delegate(PersonName n) { var sc = new WorklistItemSearchCriteria(); var scheduledPerformerNameCriteria = sc.ProcedureStep.Scheduling.Performer.Staff.Name; ApplyStringCriteria(scheduledPerformerNameCriteria.FamilyName, n.FamilyName); ApplyStringCriteria(scheduledPerformerNameCriteria.GivenName, n.GivenName); return(sc); })); // actual performer criteria.AddRange(CollectionUtils.Map(names, delegate(PersonName n) { var sc = new WorklistItemSearchCriteria(); var performerNameCriteria = sc.ProcedureStep.Performer.Staff.Name; ApplyStringCriteria(performerNameCriteria.FamilyName, n.FamilyName); ApplyStringCriteria(performerNameCriteria.GivenName, n.GivenName); return(sc); })); // build criteria against Staff ID identifiers // bug #3952: use ParseTerms instead of ParseIdentifiers, because a Staff ID might only contain letters var ids = ParseTerms(query); // scheduled performer criteria.AddRange(CollectionUtils.Map(ids, delegate(string id) { var sc = new WorklistItemSearchCriteria(); ApplyStringCriteria(sc.ProcedureStep.Scheduling.Performer.Staff.Id, id, ShouldUseExactMatchingOnIdentifiers(request)); return(sc); })); // actual performer criteria.AddRange(CollectionUtils.Map(ids, delegate(string id) { var sc = new WorklistItemSearchCriteria(); ApplyStringCriteria(sc.ProcedureStep.Performer.Staff.Id, id, ShouldUseExactMatchingOnIdentifiers(request)); return(sc); })); return(criteria); }
/// <summary> /// Adds the specified ordering to the specified query, pre-pending the specified qualifier. /// </summary> /// <param name="qualifier"></param> /// <param name="query"></param> /// <param name="criteria"></param> /// <param name="remapHqlExprFunction"></param> /// <remarks> /// All HQL dot expressions are passed through the <paramref name="remapHqlExprFunction"/>, allowing the expression /// to be modified prior to be added to the query. /// </remarks> public static void AddOrderingToQuery(string qualifier, HqlProjectionQuery query, WorklistItemSearchCriteria[] criteria, Converter<string, string> remapHqlExprFunction) { // use the sorting information from the first WorklistItemSearchCriteria object only // (the assumption is that they are all identical) var c = CollectionUtils.FirstElement(criteria); if (c == null) return; var sorts = HqlSort.FromSearchCriteria(qualifier, c, remapHqlExprFunction); query.Sorts.AddRange(sorts); }
private List <WorklistItemSearchCriteria> BuildTextQueryProcedureSearchCriteria(WorklistItemTextQueryRequest request) { var query = request.TextQuery; // this will hold all criteria var criteria = new List <WorklistItemSearchCriteria>(); // build criteria against names var names = ParsePersonNames(query); criteria.AddRange(CollectionUtils.Map(names, delegate(PersonName n) { var sc = new WorklistItemSearchCriteria(); ApplyStringCriteria(sc.PatientProfile.Name.FamilyName, n.FamilyName); ApplyStringCriteria(sc.PatientProfile.Name.GivenName, n.GivenName); return(sc); })); // build criteria against Mrn identifiers var ids = ParseIdentifiers(query); criteria.AddRange(CollectionUtils.Map(ids, delegate(string word) { var c = new WorklistItemSearchCriteria(); ApplyStringCriteria(c.PatientProfile.Mrn.Id, word, ShouldUseExactMatchingOnIdentifiers(request)); return(c); })); // build criteria against Healthcard identifiers criteria.AddRange(CollectionUtils.Map(ids, delegate(string word) { var c = new WorklistItemSearchCriteria(); ApplyStringCriteria(c.PatientProfile.Healthcard.Id, word, ShouldUseExactMatchingOnIdentifiers(request)); return(c); })); // build criteria against Accession Number criteria.AddRange(CollectionUtils.Map(ids, delegate(string word) { var c = new WorklistItemSearchCriteria(); ApplyStringCriteria(c.Order.AccessionNumber, word, ShouldUseExactMatchingOnIdentifiers(request)); return(c); })); return(criteria); }
/// <summary> /// Adds the specified criteria to the specified query, pre-pending the specified qualifier. /// </summary> /// <param name="qualifier"></param> /// <param name="criteria"></param> /// <param name="query"></param> /// <param name="remapHqlExprFunction"></param> /// <remarks> /// All HQL dot expressions are passed through the <paramref name="remapHqlExprFunction"/>, allowing the expression /// to be modified prior to be added to the query. /// </remarks> public static void AddCriteriaToQuery(string qualifier, WorklistItemSearchCriteria[] criteria, HqlProjectionQuery query, Converter<string, string> remapHqlExprFunction) { var or = new HqlOr(); foreach (var c in criteria) { if(c.IsEmpty) continue; var conditions = HqlCondition.FromSearchCriteria(qualifier, c, remapHqlExprFunction); var and = new HqlAnd(conditions); if (and.Conditions.Count > 0) or.Conditions.Add(and); } if (or.Conditions.Count > 0) query.Conditions.Add(or); }
/// <summary> /// Constructor. /// </summary> /// <param name="procedureStepClasses"></param> /// <param name="criteria"></param> /// <param name="projection"></param> /// <param name="page"></param> public QueryBuilderArgs(Type[] procedureStepClasses, WorklistItemSearchCriteria[] criteria, WorklistItemProjection projection, SearchResultPage page) { Initialize(procedureStepClasses, criteria, projection, page); }
/// <summary> /// Constructor. /// </summary> /// <param name="procedureStepClasses"></param> /// <param name="criteria"></param> /// <param name="projection"></param> public SearchQueryArgs(Type[] procedureStepClasses, WorklistItemSearchCriteria[] criteria, WorklistItemProjection projection) : base(procedureStepClasses, criteria, projection, null) { }
public TextQueryCriteria(WorklistItemSearchCriteria that, bool includeDegeneratePatientItems, bool includeDegenerateProcedureItems) : base(that) { _includeDegeneratePatientItems = includeDegeneratePatientItems; _includeDegenerateProcedureItems = includeDegenerateProcedureItems; }
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); }