private static ExternalPractitionerSearchCriteria[] GetMergeCandidatesCriteria(ExternalPractitioner practitioner)
		{
			var criteria = new List<ExternalPractitionerSearchCriteria>();

			var baseCriteria = new ExternalPractitionerSearchCriteria();
			baseCriteria.NotEqualTo(practitioner);
			baseCriteria.Deactivated.EqualTo(false);

			var nameCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();
			nameCriteria.Name.FamilyName.EqualTo(practitioner.Name.FamilyName);
			nameCriteria.Name.GivenName.EqualTo(practitioner.Name.GivenName);
			criteria.Add(nameCriteria);

			if (!string.IsNullOrEmpty(practitioner.LicenseNumber))
			{
				var licenseNumberCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();
				licenseNumberCriteria.LicenseNumber.EqualTo(practitioner.LicenseNumber);
				criteria.Add(licenseNumberCriteria);
			}

			if (!string.IsNullOrEmpty(practitioner.BillingNumber))
			{
				var billingNumberCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();
				billingNumberCriteria.BillingNumber.EqualTo(practitioner.BillingNumber);
				criteria.Add(billingNumberCriteria);
			}

			return criteria.ToArray();
		}
        private static ExternalPractitionerSearchCriteria[] GetMergeCandidatesCriteria(ExternalPractitioner practitioner)
        {
            var criteria = new List <ExternalPractitionerSearchCriteria>();

            var baseCriteria = new ExternalPractitionerSearchCriteria();

            baseCriteria.NotEqualTo(practitioner);
            baseCriteria.Deactivated.EqualTo(false);

            var nameCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();

            nameCriteria.Name.FamilyName.EqualTo(practitioner.Name.FamilyName);
            nameCriteria.Name.GivenName.EqualTo(practitioner.Name.GivenName);
            criteria.Add(nameCriteria);

            if (!string.IsNullOrEmpty(practitioner.LicenseNumber))
            {
                var licenseNumberCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();
                licenseNumberCriteria.LicenseNumber.EqualTo(practitioner.LicenseNumber);
                criteria.Add(licenseNumberCriteria);
            }

            if (!string.IsNullOrEmpty(practitioner.BillingNumber))
            {
                var billingNumberCriteria = (ExternalPractitionerSearchCriteria)baseCriteria.Clone();
                billingNumberCriteria.BillingNumber.EqualTo(practitioner.BillingNumber);
                criteria.Add(billingNumberCriteria);
            }

            return(criteria.ToArray());
        }
Example #3
0
        /// <summary>
        /// Applies this filter to the specified criteria object.
        /// </summary>
        /// <param name="criteria"></param>
        /// <param name="wqc"></param>
        public void Apply(ExternalPractitionerSearchCriteria criteria, IWorklistQueryContext wqc)
        {
            if (!this.IsEnabled)
            {
                return;
            }

            criteria.In(this.Values);
        }
        protected override IList <ExternalPractitioner> GetItemsForExport(IReadContext context, int firstRow, int maxRows)
        {
            var where = new ExternalPractitionerSearchCriteria();
            where.Name.FamilyName.SortAsc(0);
            where.Name.GivenName.SortAsc(1);
            where.Name.MiddleName.SortAsc(2);
            where.LicenseNumber.SortAsc(3);
            where.BillingNumber.SortAsc(4);

            return(context.GetBroker <IExternalPractitionerBroker>().Find(where, new SearchResultPage(firstRow, maxRows)));
        }
Example #5
0
        public TextQueryResponse <ExternalPractitionerSummary> TextQuery(TextQueryRequest request)
        {
            var broker    = PersistenceContext.GetBroker <IExternalPractitionerBroker>();
            var assembler = new ExternalPractitionerAssembler();

            var helper = new TextQueryHelper <ExternalPractitioner, ExternalPractitionerSearchCriteria, ExternalPractitionerSummary>(
                delegate
            {
                var rawQuery = request.TextQuery;

                var criteria = new List <ExternalPractitionerSearchCriteria>();

                // build criteria against names
                var names = TextQueryHelper.ParsePersonNames(rawQuery);
                criteria.AddRange(CollectionUtils.Map(names,
                                                      delegate(PersonName n)
                {
                    var sc = new ExternalPractitionerSearchCriteria();
                    sc.Name.FamilyName.StartsWith(n.FamilyName);
                    if (n.GivenName != null)
                    {
                        sc.Name.GivenName.StartsWith(n.GivenName);
                    }
                    return(sc);
                }));

                // build criteria against identifiers
                var ids = TextQueryHelper.ParseIdentifiers(rawQuery);
                criteria.AddRange(CollectionUtils.Map(ids,
                                                      delegate(string word)
                {
                    var c = new ExternalPractitionerSearchCriteria();
                    c.LicenseNumber.StartsWith(word);
                    return(c);
                }));

                return(criteria.ToArray());
            },
                prac => assembler.CreateExternalPractitionerSummary(prac, PersistenceContext),
                (criteria, threshold) => broker.Count(criteria) <= threshold,
                broker.Find);

            return(helper.Query(request));
        }
Example #6
0
        protected ExternalPractitioner GetPractitioner(string practitionerId)
        {
            if (practitionerId == null)
            {
                return(null);
            }
            ExternalPractitioner externalPractitioner = null;
            var searchCriteria = new ExternalPractitionerSearchCriteria();

            searchCriteria.LicenseNumber.EqualTo(practitionerId);
            searchCriteria.Deactivated.EqualTo(false);
            try
            {
                externalPractitioner = PersistenceContext.GetBroker <IExternalPractitionerBroker>().FindOne(searchCriteria);
            }
            catch (EntityNotFoundException)
            {
            }

            return(externalPractitioner);
        }
Example #7
0
        private ExternalPractitioner GetExternalPracitioner(string license, IEnumerable <ExternalPractitioner> importedEPs)
        {
            // if licenseId is not supplied, then assume the record does not exist
            if (string.IsNullOrEmpty(license))
            {
                return(null);
            }

            var externalPractitioner = CollectionUtils.SelectFirst(importedEPs, ep => Equals(ep.LicenseNumber, license));

            if (externalPractitioner == null)
            {
                var criteria = new ExternalPractitionerSearchCriteria();
                criteria.LicenseNumber.EqualTo(license);

                var broker = _context.GetBroker <IExternalPractitionerBroker>();
                externalPractitioner = CollectionUtils.FirstElement(broker.Find(criteria));
            }

            return(externalPractitioner);
        }
        private static ExternalPractitioner LoadExternalPractitioner(string licenseNumber, string billingNumber, IPersistenceContext context)
        {
            ExternalPractitioner prac = null;

            // if either license or billing number are supplied, check for an existing practitioner
            if (!string.IsNullOrEmpty(licenseNumber) || !string.IsNullOrEmpty(billingNumber))
            {
                var criteria = new ExternalPractitionerSearchCriteria();
                if (!string.IsNullOrEmpty(licenseNumber))
                {
                    criteria.LicenseNumber.EqualTo(licenseNumber);
                }
                if (!string.IsNullOrEmpty(billingNumber))
                {
                    criteria.BillingNumber.EqualTo(billingNumber);
                }

                var broker = context.GetBroker <IExternalPractitionerBroker>();
                prac = CollectionUtils.FirstElement(broker.Find(criteria));
            }

            return(prac);
        }
Example #9
0
        // note: this operation is not protected with ClearCanvas.Ris.Application.Common.AuthorityTokens.ExternalPractitionerAdmin
        // because it is used in non-admin situations - perhaps we need to create a separate operation???
        public ListExternalPractitionersResponse ListExternalPractitioners(ListExternalPractitionersRequest request)
        {
            var assembler = new ExternalPractitionerAssembler();

            var criteria = new ExternalPractitionerSearchCriteria();

            if (request.SortByLastVerifiedTime)
            {
                if (request.SortAscending)
                {
                    criteria.LastVerifiedTime.SortAsc(0);
                }
                else
                {
                    criteria.LastVerifiedTime.SortDesc(0);
                }
            }
            else if (request.SortByLastEditedTime)
            {
                if (request.SortAscending)
                {
                    criteria.LastEditedTime.SortAsc(0);
                }
                else
                {
                    criteria.LastEditedTime.SortDesc(0);
                }
            }
            else
            {
                criteria.Name.FamilyName.SortAsc(0);
            }

            if (!string.IsNullOrEmpty(request.FirstName))
            {
                criteria.Name.GivenName.StartsWith(request.FirstName);
            }
            if (!string.IsNullOrEmpty(request.LastName))
            {
                criteria.Name.FamilyName.StartsWith(request.LastName);
            }

            switch (request.VerifiedState)
            {
            case VerifiedState.Verified:
                criteria.IsVerified.EqualTo(true);
                break;

            case VerifiedState.NotVerified:
                criteria.IsVerified.EqualTo(false);
                break;
            }

            if (request.LastVerifiedRangeFrom != null && request.LastVerifiedRangeUntil != null)
            {
                criteria.LastVerifiedTime.Between(request.LastVerifiedRangeFrom, request.LastVerifiedRangeUntil);
            }
            else if (request.LastVerifiedRangeFrom != null)
            {
                criteria.LastVerifiedTime.MoreThanOrEqualTo(request.LastVerifiedRangeFrom);
            }
            else if (request.LastVerifiedRangeUntil != null)
            {
                criteria.LastVerifiedTime.LessThanOrEqualTo(request.LastVerifiedRangeUntil);
            }

            if (!request.IncludeMerged)
            {
                criteria.MergedInto.IsNull();
            }

            if (!request.IncludeDeactivated)
            {
                criteria.Deactivated.EqualTo(false);
            }

            var results = new List <ExternalPractitionerSummary>();

            if (request.QueryItems)
            {
                results = CollectionUtils.Map <ExternalPractitioner, ExternalPractitionerSummary, List <ExternalPractitionerSummary> >(
                    PersistenceContext.GetBroker <IExternalPractitionerBroker>().Find(criteria, request.Page),
                    s => assembler.CreateExternalPractitionerSummary(s, PersistenceContext));
            }

            var itemCount = -1;

            if (request.QueryCount)
            {
                itemCount = (int)PersistenceContext.GetBroker <IExternalPractitionerBroker>().Count(criteria);
            }

            return(new ListExternalPractitionersResponse(results, itemCount));
        }
		private ExternalPractitioner GetExternalPracitioner(string license, IEnumerable<ExternalPractitioner> importedEPs)
		{
			// if licenseId is not supplied, then assume the record does not exist
			if (string.IsNullOrEmpty(license))
				return null;

			var externalPractitioner = CollectionUtils.SelectFirst(importedEPs, ep => Equals(ep.LicenseNumber, license));

			if (externalPractitioner == null)
			{
				var criteria = new ExternalPractitionerSearchCriteria();
				criteria.LicenseNumber.EqualTo(license);

				var broker = _context.GetBroker<IExternalPractitionerBroker>();
				externalPractitioner = CollectionUtils.FirstElement(broker.Find(criteria));
			}

			return externalPractitioner;
		}
Example #11
0
        protected override void Import(WorklistData data, IUpdateContext context)
        {
            var worklist = LoadOrCreateWorklist(data.Name, data.Class, context);

            worklist.Description = data.Description;

            if (data.StaffSubscribers != null)
            {
                foreach (var s in data.StaffSubscribers)
                {
                    var criteria = new StaffSearchCriteria();
                    criteria.Id.EqualTo(s.StaffId);

                    var staff = context.GetBroker <IStaffBroker>().Find(criteria);
                    if (staff.Count == 1)
                    {
                        worklist.StaffSubscribers.Add(CollectionUtils.FirstElement(staff));
                    }
                }
            }

            if (data.GroupSubscribers != null)
            {
                foreach (var s in data.GroupSubscribers)
                {
                    var criteria = new StaffGroupSearchCriteria();
                    criteria.Name.EqualTo(s.StaffGroupName);

                    var groups = context.GetBroker <IStaffGroupBroker>().Find(criteria);
                    if (groups.Count == 1)
                    {
                        worklist.GroupSubscribers.Add(CollectionUtils.FirstElement(groups));
                    }
                }
            }

            // proc type filter
            ImportFilter(
                worklist.ProcedureTypeFilter,
                data.Filters.ProcedureTypes,
                delegate(WorklistData.ProcedureTypeData s)
            {
                var criteria = new ProcedureTypeSearchCriteria();
                criteria.Id.EqualTo(s.Id);

                var broker = context.GetBroker <IProcedureTypeBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria)));
            });

            // proc type group filter
            ImportFilter(
                worklist.ProcedureTypeGroupFilter,
                data.Filters.ProcedureTypeGroups,
                delegate(WorklistData.ProcedureTypeGroupData s)
            {
                var criteria = new ProcedureTypeGroupSearchCriteria();
                criteria.Name.EqualTo(s.Name);

                var broker = context.GetBroker <IProcedureTypeGroupBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria, ProcedureTypeGroup.GetSubClass(s.Class, context))));
            });

            //Bug #2284: don't forget to set the IncludeWorkingFacility property
            // facility filter
            worklist.FacilityFilter.IncludeWorkingFacility = data.Filters.Facilities.IncludeWorkingFacility;
            ImportFilter(
                worklist.FacilityFilter,
                data.Filters.Facilities,
                delegate(WorklistData.EnumValueData s)
            {
                var criteria = new FacilitySearchCriteria();
                criteria.Code.EqualTo(s.Code);

                var broker = context.GetBroker <IFacilityBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria)));
            });

            // department filter
            ImportFilter(
                worklist.DepartmentFilter,
                data.Filters.Departments,
                delegate(WorklistData.DepartmentData s)
            {
                var criteria = new DepartmentSearchCriteria();
                criteria.Id.EqualTo(s.Id);

                var broker = context.GetBroker <IDepartmentBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria)));
            });

            // priority filter
            ImportFilter(
                worklist.OrderPriorityFilter,
                data.Filters.OrderPriorities,
                delegate(WorklistData.EnumValueData s)
            {
                var broker = context.GetBroker <IEnumBroker>();
                return(broker.Find <OrderPriorityEnum>(s.Code));
            });

            // ordering prac filter
            ImportFilter(
                worklist.OrderingPractitionerFilter,
                data.Filters.OrderingPractitioners,
                delegate(WorklistData.PractitionerData s)
            {
                var criteria = new ExternalPractitionerSearchCriteria();
                criteria.Name.FamilyName.EqualTo(s.FamilyName);
                criteria.Name.GivenName.EqualTo(s.GivenName);

                // these criteria may not be provided (the data may not existed when exported),
                // but if available, they help to ensure the correct practitioner is being mapped
                if (!string.IsNullOrEmpty(s.BillingNumber))
                {
                    criteria.BillingNumber.EqualTo(s.BillingNumber);
                }
                if (!string.IsNullOrEmpty(s.LicenseNumber))
                {
                    criteria.LicenseNumber.EqualTo(s.LicenseNumber);
                }

                var broker = context.GetBroker <IExternalPractitionerBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria)));
            });

            // patient class filter
            ImportFilter(
                worklist.PatientClassFilter,
                data.Filters.PatientClasses,
                delegate(WorklistData.EnumValueData s)
            {
                var broker = context.GetBroker <IEnumBroker>();
                return(broker.Find <PatientClassEnum>(s.Code));
            });

            // patient location filter
            ImportFilter(
                worklist.PatientLocationFilter,
                data.Filters.PatientLocations,
                delegate(WorklistData.LocationData s)
            {
                var criteria = new LocationSearchCriteria();
                criteria.Id.EqualTo(s.Id);

                var broker = context.GetBroker <ILocationBroker>();
                return(CollectionUtils.FirstElement(broker.Find(criteria)));
            });

            // portable filter
            worklist.PortableFilter.IsEnabled = data.Filters.Portable.Enabled;
            worklist.PortableFilter.Value     = data.Filters.Portable.Value;

            //Bug #2429: don't forget to include the time filter
            // time filter
            worklist.TimeFilter.IsEnabled = data.Filters.TimeWindow.Enabled;
            worklist.TimeFilter.Value     = data.Filters.TimeWindow == null || data.Filters.TimeWindow.Value == null
                                                                                        ? null
                                                                                        : data.Filters.TimeWindow.Value.CreateTimeRange();

            // reporting filters
            if (Worklist.GetSupportsReportingStaffRoleFilter(worklist.GetClass()))
            {
                ImportReportingWorklistFilters(data, worklist.As <ReportingWorklist>(), context);
            }
        }