public TextQueryResponse <ProcedureTypeSummary> TextQuery(TextQueryRequest request)
        {
            var broker    = PersistenceContext.GetBroker <IProcedureTypeBroker>();
            var assembler = new ProcedureTypeAssembler();

            var helper = new TextQueryHelper <ProcedureType, ProcedureTypeSearchCriteria, ProcedureTypeSummary>(
                delegate
            {
                var rawQuery = request.TextQuery;

                IList <string> terms = TextQueryHelper.ParseTerms(rawQuery);
                var criteria         = new List <ProcedureTypeSearchCriteria>();

                // allow matching on name (assume entire query is a name which may contain spaces)
                var nameCriteria = new ProcedureTypeSearchCriteria();
                nameCriteria.Name.StartsWith(rawQuery);
                criteria.Add(nameCriteria);

                // allow matching of any term against ID
                criteria.AddRange(CollectionUtils.Map(terms,
                                                      delegate(string term)
                {
                    var c = new ProcedureTypeSearchCriteria();
                    c.Id.StartsWith(term);
                    return(c);
                }));

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

            return(helper.Query(request));
        }
        public ListProcedureTypesResponse ListProcedureTypes(ListProcedureTypesRequest request)
        {
            Platform.CheckForNullReference(request, "request");

            var where = new ProcedureTypeSearchCriteria();
            where.Id.SortAsc(0);
            if (!string.IsNullOrEmpty(request.Id))
            {
                where.Id.StartsWith(request.Id);
            }
            if (!string.IsNullOrEmpty(request.Name))
            {
                where.Name.Like(string.Format("%{0}%", request.Name));
            }
            if (!request.IncludeDeactivated)
            {
                where.Deactivated.EqualTo(false);
            }

            var broker = PersistenceContext.GetBroker <IProcedureTypeBroker>();
            var items  = broker.Find(where, request.Page);

            var assembler = new ProcedureTypeAssembler();

            return(new ListProcedureTypesResponse(CollectionUtils.Map(items, (ProcedureType item) => assembler.CreateSummary(item))));
        }
Example #3
0
        public ProcedureRequisition CreateProcedureRequisition(Procedure procedure, IPersistenceContext context)
        {
            var modality = procedure.ModalityProcedureSteps.Select(mps => mps.Modality).FirstOrDefault();

            var procedureTypeAssembler = new ProcedureTypeAssembler();
            var facilityAssembler      = new FacilityAssembler();
            var departmentAssembler    = new DepartmentAssembler();
            var modalityAssembler      = new ModalityAssembler();

            // create requisition
            return(new ProcedureRequisition(
                       procedure.GetRef(),
                       procedureTypeAssembler.CreateSummary(procedure.Type),
                       procedure.Number,
                       procedure.ScheduledStartTime,
                       procedure.ScheduledDuration,
                       modalityAssembler.CreateModalitySummary(modality),
                       EnumUtils.GetEnumValueInfo(procedure.SchedulingCode),
                       procedure.PerformingFacility == null ? null : facilityAssembler.CreateFacilitySummary(procedure.PerformingFacility),
                       procedure.PerformingDepartment == null ? null : departmentAssembler.CreateSummary(procedure.PerformingDepartment, context),
                       EnumUtils.GetEnumValueInfo(procedure.Laterality, context),
                       procedure.Portable,
                       procedure.IsPreCheckIn == false,
                       EnumUtils.GetEnumValueInfo(procedure.Status, context),
                       IsProcedureModifiable(procedure),
                       procedure.Status == ProcedureStatus.CA || procedure.Status == ProcedureStatus.DC));
        }
		public TextQueryResponse<ProcedureTypeSummary> TextQuery(TextQueryRequest request)
		{
			var broker = PersistenceContext.GetBroker<IProcedureTypeBroker>();
			var assembler = new ProcedureTypeAssembler();

			var helper = new TextQueryHelper<ProcedureType, ProcedureTypeSearchCriteria, ProcedureTypeSummary>(
					delegate
					{
						var rawQuery = request.TextQuery;

						IList<string> terms = TextQueryHelper.ParseTerms(rawQuery);
						var criteria = new List<ProcedureTypeSearchCriteria>();

						// allow matching on name (assume entire query is a name which may contain spaces)
						var nameCriteria = new ProcedureTypeSearchCriteria();
						nameCriteria.Name.StartsWith(rawQuery);
						criteria.Add(nameCriteria);

						// allow matching of any term against ID
						criteria.AddRange(CollectionUtils.Map(terms,
									 delegate(string term)
									 {
										 var c = new ProcedureTypeSearchCriteria();
										 c.Id.StartsWith(term);
										 return c;
									 }));

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

			return helper.Query(request);
		}
        public LoadProcedureTypeForEditResponse LoadProcedureTypeForEdit(LoadProcedureTypeForEditRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.ProcedureTypeRef, "request.ProcedureTypeRef");

            var item = PersistenceContext.Load <ProcedureType>(request.ProcedureTypeRef);

            var assembler = new ProcedureTypeAssembler();

            return(new LoadProcedureTypeForEditResponse(assembler.CreateDetail(item, PersistenceContext)));
        }
Example #6
0
        public LoadDiagnosticServiceEditorFormDataResponse LoadDiagnosticServiceEditorFormData(LoadDiagnosticServiceEditorFormDataRequest request)
        {
            ProcedureTypeSearchCriteria where = new ProcedureTypeSearchCriteria();
            where.Id.SortAsc(0);
            where.Deactivated.EqualTo(false);

            IList <ProcedureType> procTypes = PersistenceContext.GetBroker <IProcedureTypeBroker>().Find(where);

            ProcedureTypeAssembler assembler = new ProcedureTypeAssembler();

            return(new LoadDiagnosticServiceEditorFormDataResponse(
                       CollectionUtils.Map <ProcedureType, ProcedureTypeSummary>(procTypes,
                                                                                 delegate(ProcedureType pt) { return assembler.CreateSummary(pt); })));
        }
Example #7
0
        private static void UpdateListItem(OrderListItem data, Procedure rp, IPersistenceContext context)
        {
            var rptAssembler = new ProcedureTypeAssembler();

            data.ProcedureRef  = rp.GetRef();
            data.ProcedureType = rptAssembler.CreateSummary(rp.Type);
            data.ProcedureScheduledStartTime = rp.ScheduledStartTime;
            data.ProcedureSchedulingCode     = EnumUtils.GetEnumValueInfo(rp.SchedulingCode);
            data.ProcedureCheckInTime        = rp.ProcedureCheckIn.CheckInTime;
            data.ProcedureCheckOutTime       = rp.ProcedureCheckIn.CheckOutTime;
            data.ProcedureStatus             = EnumUtils.GetEnumValueInfo(rp.Status, context);
            data.ProcedurePerformingFacility = new FacilityAssembler().CreateFacilitySummary(rp.PerformingFacility);
            data.ProcedurePortable           = rp.Portable;
            data.ProcedureLaterality         = EnumUtils.GetEnumValueInfo(rp.Laterality, context);
        }
        public AddProcedureTypeResponse AddProcedureType(AddProcedureTypeRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.ProcedureType, "request.ProcedureType");

            var item = new ProcedureType();

            var assembler = new ProcedureTypeAssembler();

            assembler.UpdateProcedureType(item, request.ProcedureType, PersistenceContext);

            PersistenceContext.Lock(item, DirtyState.New);
            PersistenceContext.SynchState();

            return(new AddProcedureTypeResponse(assembler.CreateSummary(item)));
        }
        public UpdateProcedureTypeResponse UpdateProcedureType(UpdateProcedureTypeRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.ProcedureType, "request.ProcedureType");
            Platform.CheckMemberIsSet(request.ProcedureType.ProcedureTypeRef, "request.ProcedureType.ProcedureTypeRef");

            var item = PersistenceContext.Load <ProcedureType>(request.ProcedureType.ProcedureTypeRef);

            var assembler = new ProcedureTypeAssembler();

            assembler.UpdateProcedureType(item, request.ProcedureType, PersistenceContext);

            PersistenceContext.SynchState();

            return(new UpdateProcedureTypeResponse(assembler.CreateSummary(item)));
        }
        public GetPriorsResponse GetPriors(GetPriorsRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            if (request.OrderRef == null && request.ReportRef == null)
            {
                throw new ArgumentException("Either OrderRef or ReportRef must be non-null");
            }

            var priorReports = new HashedSet <Prior>();
            var broker       = this.PersistenceContext.GetBroker <IPriorReportBroker>();

            // if an order was supplied, find relevant priors for the order
            if (request.OrderRef != null)
            {
                var order = this.PersistenceContext.Load <Order>(request.OrderRef, EntityLoadFlags.Proxy);
                priorReports.AddAll(broker.GetPriors(order, request.RelevantOnly));
            }
            // if a report was supplied, find relevent priors for the report
            else if (request.ReportRef != null)
            {
                var report = this.PersistenceContext.Load <Report>(request.ReportRef, EntityLoadFlags.Proxy);
                priorReports.AddAll(broker.GetPriors(report, request.RelevantOnly));
            }

            // assemble results
            var procedureTypeAssembler     = new ProcedureTypeAssembler();
            var diagnosticServiceAssembler = new DiagnosticServiceAssembler();

            // Note: we use the ProcedureCheckin.CheckOutTime as the PerformedDate
            // because it is the closest to the end of modality procedure step completion time.
            // However, if we change the definition of CheckOutTime in the future, this won't be accurate
            var priorSummaries = CollectionUtils.Map(priorReports,
                                                     (Prior prior) => new PriorProcedureSummary(
                                                         prior.Order.GetRef(),
                                                         prior.Procedure.GetRef(),
                                                         prior.Report.GetRef(),
                                                         prior.Order.AccessionNumber,
                                                         diagnosticServiceAssembler.CreateSummary(prior.Order.DiagnosticService),
                                                         procedureTypeAssembler.CreateSummary(prior.ProcedureType),
                                                         prior.Procedure.Portable,
                                                         EnumUtils.GetEnumValueInfo(prior.Procedure.Laterality, PersistenceContext),
                                                         EnumUtils.GetEnumValueInfo(prior.Report.Status, PersistenceContext),
                                                         prior.Procedure.ProcedureCheckIn.CheckOutTime));

            return(new GetPriorsResponse(priorSummaries));
        }
		public GetProcedureTypeGroupEditFormDataResponse GetProcedureTypeGroupEditFormData(
			GetProcedureTypeGroupEditFormDataRequest request)
		{
			var response = new GetProcedureTypeGroupEditFormDataResponse();
			var ptgAssembler = new ProcedureTypeGroupAssembler();
			var subClasses = ProcedureTypeGroup.ListSubClasses(PersistenceContext);

			// Category choices
			response.Categories = CollectionUtils.Map(subClasses, (Type t) => ptgAssembler.GetCategoryEnumValueInfo(t));

			// ProcedureType choices
			var assembler = new ProcedureTypeAssembler();
			response.ProcedureTypes = CollectionUtils.Map(
				PersistenceContext.GetBroker<IProcedureTypeBroker>().FindAll(request.IncludeDeactivated),
				(ProcedureType rpt) => assembler.CreateSummary(rpt));

			return response;
		}
        public GetProcedureTypeGroupEditFormDataResponse GetProcedureTypeGroupEditFormData(
            GetProcedureTypeGroupEditFormDataRequest request)
        {
            var response     = new GetProcedureTypeGroupEditFormDataResponse();
            var ptgAssembler = new ProcedureTypeGroupAssembler();
            var subClasses   = ProcedureTypeGroup.ListSubClasses(PersistenceContext);

            // Category choices
            response.Categories = CollectionUtils.Map(subClasses, (Type t) => ptgAssembler.GetCategoryEnumValueInfo(t));

            // ProcedureType choices
            var assembler = new ProcedureTypeAssembler();

            response.ProcedureTypes = CollectionUtils.Map(
                PersistenceContext.GetBroker <IProcedureTypeBroker>().FindAll(request.IncludeDeactivated),
                (ProcedureType rpt) => assembler.CreateSummary(rpt));

            return(response);
        }
		public UpdateProcedureTypeResponse UpdateProcedureType(UpdateProcedureTypeRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.ProcedureType, "request.ProcedureType");
			Platform.CheckMemberIsSet(request.ProcedureType.ProcedureTypeRef, "request.ProcedureType.ProcedureTypeRef");

			var item = PersistenceContext.Load<ProcedureType>(request.ProcedureType.ProcedureTypeRef);

			var assembler = new ProcedureTypeAssembler();
			assembler.UpdateProcedureType(item, request.ProcedureType, PersistenceContext);

			PersistenceContext.SynchState();

			return new UpdateProcedureTypeResponse(assembler.CreateSummary(item));
		}
		public AddProcedureTypeResponse AddProcedureType(AddProcedureTypeRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.ProcedureType, "request.ProcedureType");

			var item = new ProcedureType();

			var assembler = new ProcedureTypeAssembler();
			assembler.UpdateProcedureType(item, request.ProcedureType, PersistenceContext);

			PersistenceContext.Lock(item, DirtyState.New);
			PersistenceContext.SynchState();

			return new AddProcedureTypeResponse(assembler.CreateSummary(item));
		}
		public LoadProcedureTypeForEditResponse LoadProcedureTypeForEdit(LoadProcedureTypeForEditRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.ProcedureTypeRef, "request.ProcedureTypeRef");

			var item = PersistenceContext.Load<ProcedureType>(request.ProcedureTypeRef);

			var assembler = new ProcedureTypeAssembler();
			return new LoadProcedureTypeForEditResponse(assembler.CreateDetail(item, PersistenceContext));
		}
Example #16
0
		private static void UpdateListItem(OrderListItem data, Procedure rp, IPersistenceContext context)
		{
			var rptAssembler = new ProcedureTypeAssembler();
			data.ProcedureRef = rp.GetRef();
			data.ProcedureType = rptAssembler.CreateSummary(rp.Type);
			data.ProcedureScheduledStartTime = rp.ScheduledStartTime;
			data.ProcedureSchedulingCode = EnumUtils.GetEnumValueInfo(rp.SchedulingCode);
			data.ProcedureCheckInTime = rp.ProcedureCheckIn.CheckInTime;
			data.ProcedureCheckOutTime = rp.ProcedureCheckIn.CheckOutTime;
			data.ProcedureStatus = EnumUtils.GetEnumValueInfo(rp.Status, context);
			data.ProcedurePerformingFacility = new FacilityAssembler().CreateFacilitySummary(rp.PerformingFacility);
			data.ProcedurePortable = rp.Portable;
			data.ProcedureLaterality = EnumUtils.GetEnumValueInfo(rp.Laterality, context);
		}
        private GetWorklistEditFormChoicesResponse GetWorklistEditFormChoices(GetWorklistEditFormChoicesRequest request)
        {
            var response = new GetWorklistEditFormChoicesResponse();

            var assembler = new WorklistAdminAssembler();

            response.WorklistClasses = CollectionUtils.Map <Type, WorklistClassSummary>(
                ListClassesHelper(null, null, false),
                assembler.CreateClassSummary);

            var staffAssembler = new StaffAssembler();

            response.StaffChoices = CollectionUtils.Map <Staff, StaffSummary>(
                this.PersistenceContext.GetBroker <IStaffBroker>().FindAll(false),
                item => staffAssembler.CreateStaffSummary(item, PersistenceContext));

            var staffGroupAssembler = new StaffGroupAssembler();

            response.GroupSubscriberChoices = CollectionUtils.Map <StaffGroup, StaffGroupSummary>(
                this.PersistenceContext.GetBroker <IStaffGroupBroker>().FindAll(false),
                staffGroupAssembler.CreateSummary);

            var facilityAssembler = new FacilityAssembler();

            response.FacilityChoices = CollectionUtils.Map <Facility, FacilitySummary>(
                this.PersistenceContext.GetBroker <IFacilityBroker>().FindAll(false),
                facilityAssembler.CreateFacilitySummary);

            var departmentAssembler = new DepartmentAssembler();

            response.DepartmentChoices = CollectionUtils.Map(
                this.PersistenceContext.GetBroker <IDepartmentBroker>().FindAll(false),
                (Department item) => departmentAssembler.CreateSummary(item, PersistenceContext));

            var locationAssembler = new LocationAssembler();

            response.PatientLocationChoices = CollectionUtils.Map <Location, LocationSummary>(
                this.PersistenceContext.GetBroker <ILocationBroker>().FindAll(false),
                locationAssembler.CreateLocationSummary);

            response.OrderPriorityChoices = EnumUtils.GetEnumValueList <OrderPriorityEnum>(PersistenceContext);
            response.PatientClassChoices  = EnumUtils.GetEnumValueList <PatientClassEnum>(PersistenceContext);

            response.CurrentServerConfigurationRequiresTimeFilter = Worklist.CurrentServerConfigurationRequiresTimeFilter();
            response.CurrentServerConfigurationMaxSpanDays        = Worklist.CurrentServerConfigurationMaxSpanDays();

            // add extra data iff editing a user-defined worklist (bug #4871)
            if (request.UserDefinedWorklist)
            {
                response.OwnerGroupChoices = CollectionUtils.Map <StaffGroup, StaffGroupSummary>(
                    this.CurrentUserStaff.ActiveGroups,                     // only current user's active staff groups should be choosable
                    staffGroupAssembler.CreateSummary);
            }

            var proceduerTypesAssembler = new ProcedureTypeAssembler();

            response.ProcedureTypeChoices = CollectionUtils.Map <ProcedureType, ProcedureTypeSummary>(
                this.PersistenceContext.GetBroker <IProcedureTypeBroker>().FindAll(false),
                proceduerTypesAssembler.CreateSummary);

            return(response);
        }
Example #18
0
        /// <summary>
        /// Create worklist detail.
        /// </summary>
        /// <param name="worklist"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public WorklistAdminDetail CreateWorklistDetail(Worklist worklist, IPersistenceContext context)
        {
            var detail = new WorklistAdminDetail(worklist.GetRef(), worklist.Name, worklist.Description,
                                                 CreateClassSummary(worklist.GetClass()));

            var staffAssembler      = new StaffAssembler();
            var staffGroupAssembler = new StaffGroupAssembler();

            detail.OwnerStaff = worklist.Owner.IsStaffOwner ?
                                staffAssembler.CreateStaffSummary(worklist.Owner.Staff, context) : null;
            detail.OwnerGroup = worklist.Owner.IsGroupOwner ?
                                staffGroupAssembler.CreateSummary(worklist.Owner.Group) : null;

            // proc types
            var ptAssembler = new ProcedureTypeAssembler();

            detail.ProcedureTypes = GetFilterSummary(worklist.ProcedureTypeFilter,
                                                     item => ptAssembler.CreateSummary(item));

            // proc type groups
            var ptgAssembler = new ProcedureTypeGroupAssembler();

            detail.ProcedureTypeGroups = GetFilterSummary(worklist.ProcedureTypeGroupFilter,
                                                          item => ptgAssembler.GetProcedureTypeGroupSummary(item, context));

            // facilities
            var facilityAssembler = new FacilityAssembler();

            detail.Facilities = GetFilterSummary(worklist.FacilityFilter,
                                                 item => facilityAssembler.CreateFacilitySummary(item));
            detail.FilterByWorkingFacility = worklist.FacilityFilter.IsEnabled && worklist.FacilityFilter.IncludeWorkingFacility;

            // departments
            var departmentAssembler = new DepartmentAssembler();

            detail.Departments = GetFilterSummary(worklist.DepartmentFilter,
                                                  item => departmentAssembler.CreateSummary(item, context));

            // patient class
            detail.PatientClasses = GetFilterSummary(worklist.PatientClassFilter,
                                                     item => EnumUtils.GetEnumValueInfo(item));

            // location
            var locationAssembler = new LocationAssembler();

            detail.PatientLocations = GetFilterSummary(worklist.PatientLocationFilter,
                                                       item => locationAssembler.CreateLocationSummary(item));

            // order priority
            detail.OrderPriorities = GetFilterSummary(worklist.OrderPriorityFilter,
                                                      item => EnumUtils.GetEnumValueInfo(item));

            // ordering prac
            var practitionerAssembler = new ExternalPractitionerAssembler();

            detail.OrderingPractitioners = GetFilterSummary(worklist.OrderingPractitionerFilter,
                                                            item => practitionerAssembler.CreateExternalPractitionerSummary(item, context));

            // portable
            if (worklist.PortableFilter.IsEnabled)
            {
                detail.Portabilities = new List <bool> {
                    worklist.PortableFilter.Value
                };
            }

            // time window
            if (worklist.TimeFilter.IsEnabled && worklist.TimeFilter.Value != null)
            {
                if (worklist.TimeFilter.Value.Start != null)
                {
                    detail.StartTime = CreateTimePointContract(worklist.TimeFilter.Value.Start);
                }
                if (worklist.TimeFilter.Value.End != null)
                {
                    detail.EndTime = CreateTimePointContract(worklist.TimeFilter.Value.End);
                }
            }

            detail.StaffSubscribers = CollectionUtils.Map(worklist.StaffSubscribers,
                                                          (Staff staff) => staffAssembler.CreateStaffSummary(staff, context));

            detail.GroupSubscribers = CollectionUtils.Map(worklist.GroupSubscribers,
                                                          (StaffGroup group) => staffGroupAssembler.CreateSummary(group));

            // Some ReportingWorklists can support staff role filters, if that is true for this worklist,
            // add those filters to the WorklistAdminDetail
            if (Worklist.GetSupportsReportingStaffRoleFilter(worklist.GetClass()))
            {
                var reportingWorklist = worklist.As <ReportingWorklist>();
                detail.InterpretedByStaff = GetFilterSummary(reportingWorklist.InterpretedByStaffFilter, context);
                detail.TranscribedByStaff = GetFilterSummary(reportingWorklist.TranscribedByStaffFilter, context);
                detail.VerifiedByStaff    = GetFilterSummary(reportingWorklist.VerifiedByStaffFilter, context);
                detail.SupervisedByStaff  = GetFilterSummary(reportingWorklist.SupervisedByStaffFilter, context);
            }

            return(detail);
        }
Example #19
0
		public GetPriorsResponse GetPriors(GetPriorsRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			if (request.OrderRef == null && request.ReportRef == null)
				throw new ArgumentException("Either OrderRef or ReportRef must be non-null");

			var priorReports = new HashedSet<Prior>();
			var broker = this.PersistenceContext.GetBroker<IPriorReportBroker>();

			// if an order was supplied, find relevant priors for the order
			if (request.OrderRef != null)
			{
				var order = this.PersistenceContext.Load<Order>(request.OrderRef, EntityLoadFlags.Proxy);
				priorReports.AddAll(broker.GetPriors(order, request.RelevantOnly));
			}
			// if a report was supplied, find relevent priors for the report
			else if (request.ReportRef != null)
			{
				var report = this.PersistenceContext.Load<Report>(request.ReportRef, EntityLoadFlags.Proxy);
				priorReports.AddAll(broker.GetPriors(report, request.RelevantOnly));
			}

			// assemble results
			var procedureTypeAssembler = new ProcedureTypeAssembler();
			var diagnosticServiceAssembler = new DiagnosticServiceAssembler();

			// Note: we use the ProcedureCheckin.CheckOutTime as the PerformedDate
			// because it is the closest to the end of modality procedure step completion time.
			// However, if we change the definition of CheckOutTime in the future, this won't be accurate
			var priorSummaries = CollectionUtils.Map(priorReports,
				(Prior prior) => new PriorProcedureSummary(
							prior.Order.GetRef(),
							prior.Procedure.GetRef(),
				         	prior.Report.GetRef(),
							prior.Order.AccessionNumber,
							diagnosticServiceAssembler.CreateSummary(prior.Order.DiagnosticService),
							procedureTypeAssembler.CreateSummary(prior.ProcedureType),
							prior.Procedure.Portable,
							EnumUtils.GetEnumValueInfo(prior.Procedure.Laterality, PersistenceContext),
							EnumUtils.GetEnumValueInfo(prior.Report.Status, PersistenceContext),
							prior.Procedure.ProcedureCheckIn.CheckOutTime));

			return new GetPriorsResponse(priorSummaries);
		}
		public ProcedureRequisition CreateProcedureRequisition(Procedure procedure, IPersistenceContext context)
		{
			var modality = procedure.ModalityProcedureSteps.Select(mps => mps.Modality).FirstOrDefault();

			var procedureTypeAssembler = new ProcedureTypeAssembler();
			var facilityAssembler = new FacilityAssembler();
			var departmentAssembler = new DepartmentAssembler();
			var modalityAssembler = new ModalityAssembler();

			// create requisition
			return new ProcedureRequisition(
				procedure.GetRef(),
				procedureTypeAssembler.CreateSummary(procedure.Type),
				procedure.Number,
				procedure.ScheduledStartTime,
				procedure.ScheduledDuration,
				modalityAssembler.CreateModalitySummary(modality),
				EnumUtils.GetEnumValueInfo(procedure.SchedulingCode),
				procedure.PerformingFacility == null ? null : facilityAssembler.CreateFacilitySummary(procedure.PerformingFacility),
				procedure.PerformingDepartment == null ? null : departmentAssembler.CreateSummary(procedure.PerformingDepartment, context),
				EnumUtils.GetEnumValueInfo(procedure.Laterality, context),
				procedure.Portable,
				procedure.IsPreCheckIn == false,
				EnumUtils.GetEnumValueInfo(procedure.Status, context),
				IsProcedureModifiable(procedure),
				procedure.Status == ProcedureStatus.CA || procedure.Status == ProcedureStatus.DC);
		}
		private GetWorklistEditFormChoicesResponse GetWorklistEditFormChoices(GetWorklistEditFormChoicesRequest request)
		{
			var response = new GetWorklistEditFormChoicesResponse();

			var assembler = new WorklistAdminAssembler();
			response.WorklistClasses = CollectionUtils.Map<Type, WorklistClassSummary>(
				ListClassesHelper(null, null, false),
				assembler.CreateClassSummary);

			var staffAssembler = new StaffAssembler();
			response.StaffChoices = CollectionUtils.Map<Staff, StaffSummary>(
				this.PersistenceContext.GetBroker<IStaffBroker>().FindAll(false),
				item => staffAssembler.CreateStaffSummary(item, PersistenceContext));

			var staffGroupAssembler = new StaffGroupAssembler();
			response.GroupSubscriberChoices = CollectionUtils.Map<StaffGroup, StaffGroupSummary>(
				this.PersistenceContext.GetBroker<IStaffGroupBroker>().FindAll(false),
				staffGroupAssembler.CreateSummary);

			var facilityAssembler = new FacilityAssembler();
			response.FacilityChoices = CollectionUtils.Map<Facility, FacilitySummary>(
				this.PersistenceContext.GetBroker<IFacilityBroker>().FindAll(false),
				facilityAssembler.CreateFacilitySummary);

			var departmentAssembler = new DepartmentAssembler();
			response.DepartmentChoices = CollectionUtils.Map(
				this.PersistenceContext.GetBroker<IDepartmentBroker>().FindAll(false),
				(Department item) => departmentAssembler.CreateSummary(item, PersistenceContext));

			var locationAssembler = new LocationAssembler();
			response.PatientLocationChoices = CollectionUtils.Map<Location, LocationSummary>(
				this.PersistenceContext.GetBroker<ILocationBroker>().FindAll(false),
				locationAssembler.CreateLocationSummary);

			response.OrderPriorityChoices = EnumUtils.GetEnumValueList<OrderPriorityEnum>(PersistenceContext);
			response.PatientClassChoices = EnumUtils.GetEnumValueList<PatientClassEnum>(PersistenceContext);

			response.CurrentServerConfigurationRequiresTimeFilter = Worklist.CurrentServerConfigurationRequiresTimeFilter();
			response.CurrentServerConfigurationMaxSpanDays = Worklist.CurrentServerConfigurationMaxSpanDays();

			// add extra data iff editing a user-defined worklist (bug #4871)
			if (request.UserDefinedWorklist)
			{
				response.OwnerGroupChoices = CollectionUtils.Map<StaffGroup, StaffGroupSummary>(
					this.CurrentUserStaff.ActiveGroups, // only current user's active staff groups should be choosable
					staffGroupAssembler.CreateSummary);
			}

			var proceduerTypesAssembler = new ProcedureTypeAssembler();
			response.ProcedureTypeChoices = CollectionUtils.Map<ProcedureType, ProcedureTypeSummary>(
				this.PersistenceContext.GetBroker<IProcedureTypeBroker>().FindAll(false),
				proceduerTypesAssembler.CreateSummary);

			return response;
		}
		public ListProcedureTypesResponse ListProcedureTypes(ListProcedureTypesRequest request)
		{
			Platform.CheckForNullReference(request, "request");

			var where = new ProcedureTypeSearchCriteria();
			where.Id.SortAsc(0);
			if (!string.IsNullOrEmpty(request.Id))
				where.Id.StartsWith(request.Id);
			if (!string.IsNullOrEmpty(request.Name))
				where.Name.Like(string.Format("%{0}%", request.Name));
			if (!request.IncludeDeactivated)
				where.Deactivated.EqualTo(false);

			var broker = PersistenceContext.GetBroker<IProcedureTypeBroker>();
			var items = broker.Find(where, request.Page);

			var assembler = new ProcedureTypeAssembler();
			return new ListProcedureTypesResponse(CollectionUtils.Map(items, (ProcedureType item) => assembler.CreateSummary(item)));
		}
		public LoadDiagnosticServiceEditorFormDataResponse LoadDiagnosticServiceEditorFormData(LoadDiagnosticServiceEditorFormDataRequest request)
		{
			ProcedureTypeSearchCriteria where = new ProcedureTypeSearchCriteria();
			where.Id.SortAsc(0);
			where.Deactivated.EqualTo(false);

			IList<ProcedureType> procTypes = PersistenceContext.GetBroker<IProcedureTypeBroker>().Find(where);

			ProcedureTypeAssembler assembler = new ProcedureTypeAssembler();
			return new LoadDiagnosticServiceEditorFormDataResponse(
				CollectionUtils.Map<ProcedureType, ProcedureTypeSummary>(procTypes,
					delegate(ProcedureType pt) { return assembler.CreateSummary(pt); }));
		}