コード例 #1
0
		/// <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;
		}
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: QueryBuilderHelpers.cs プロジェクト: nhannd/Xian
		/// <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);
		}
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: QueryBuilderHelpers.cs プロジェクト: nhannd/Xian
		/// <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);
		}
コード例 #6
0
		/// <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);
		}
コード例 #7
0
ファイル: SearchQueryArgs.cs プロジェクト: nhannd/Xian
		/// <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)
		{
		}
コード例 #8
0
 public TextQueryCriteria(WorklistItemSearchCriteria that, bool includeDegeneratePatientItems, bool includeDegenerateProcedureItems)
     : base(that)
 {
     _includeDegeneratePatientItems   = includeDegeneratePatientItems;
     _includeDegenerateProcedureItems = includeDegenerateProcedureItems;
 }
コード例 #9
0
        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);
        }