private StaffSummary GetUniqueAssignedInterpreter(Order order)
        {
            StaffSummary uniqueAssignedInterpreter = null;
            var          staffAssembler            = new StaffAssembler();

            // establish whether there is a unique assigned interpreter for all procedures
            var interpreters = new HashedSet <Staff>();

            foreach (var procedure in order.Procedures)
            {
                var pendingInterpretationStep = procedure.GetProcedureStep(
                    ps => ps.Is <InterpretationStep>() && ps.State == ActivityStatus.SC);

                if (pendingInterpretationStep != null && pendingInterpretationStep.AssignedStaff != null)
                {
                    interpreters.Add(pendingInterpretationStep.AssignedStaff);
                }
            }

            if (interpreters.Count == 1)
            {
                uniqueAssignedInterpreter = staffAssembler.CreateStaffSummary(
                    CollectionUtils.FirstElement(interpreters),
                    this.PersistenceContext);
            }

            return(uniqueAssignedInterpreter);
        }
示例#2
0
        public AddStaffResponse AddStaff(AddStaffRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.StaffDetail, "StaffDetail");

            // if trying to associate with a user account, check the account is free
            if (!string.IsNullOrEmpty(request.StaffDetail.UserName))
            {
                ValidateUserNameFree(request.StaffDetail.UserName);
            }

            // create new staff
            var staff = new Staff();

            // set properties from request
            var assembler = new StaffAssembler();

            var groupsEditable = Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup);

            assembler.UpdateStaff(request.StaffDetail,
                                  staff,
                                  groupsEditable,
                                  groupsEditable,
                                  PersistenceContext);

            PersistenceContext.Lock(staff, DirtyState.New);

            // ensure the new staff is assigned an OID before using it in the return value
            PersistenceContext.SynchState();

            return(new AddStaffResponse(assembler.CreateStaffSummary(staff, PersistenceContext)));
        }
示例#3
0
        public UpdateStaffResponse UpdateStaff(UpdateStaffRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.StaffDetail, "StaffDetail");

            var staff = PersistenceContext.Load <Staff>(request.StaffDetail.StaffRef);

            // ensure user has access to edit this staff
            CheckWriteAccess(staff);

            // if trying to associate with a new user account, check the account is free
            if (!string.IsNullOrEmpty(request.StaffDetail.UserName) && request.StaffDetail.UserName != staff.UserName)
            {
                ValidateUserNameFree(request.StaffDetail.UserName);
            }

            var assembler = new StaffAssembler();

            assembler.UpdateStaff(request.StaffDetail,
                                  staff,
                                  request.UpdateElectiveGroups && (Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup) || staff.UserName == this.CurrentUser),
                                  request.UpdateNonElectiveGroups && Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup),
                                  PersistenceContext);

            return(new UpdateStaffResponse(assembler.CreateStaffSummary(staff, PersistenceContext)));
        }
示例#4
0
		// note: this operation is not protected with ClearCanvas.Ris.Application.Common.AuthorityTokens.StaffAdmin
		// because it is used in non-admin situations - perhaps we need to create a separate operation???
		public ListStaffResponse ListStaff(ListStaffRequest request)
		{

			var assembler = new StaffAssembler();

			var criteria = new StaffSearchCriteria();
			criteria.Name.FamilyName.SortAsc(0);

            if (!string.IsNullOrEmpty(request.StaffID))
				ApplyCondition(criteria.Id, request.StaffID, request.ExactMatch);

            if (!string.IsNullOrEmpty(request.GivenName))
				ApplyCondition(criteria.Name.GivenName, request.GivenName, request.ExactMatch); 

			if (!string.IsNullOrEmpty(request.FamilyName))
				ApplyCondition(criteria.Name.FamilyName, request.FamilyName, request.ExactMatch);

			if (!string.IsNullOrEmpty(request.UserName))
				criteria.UserName.EqualTo(request.UserName);

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

			ApplyStaffTypesFilter(request.StaffTypesFilter, new [] { criteria });

			return new ListStaffResponse(
				CollectionUtils.Map<Staff, StaffSummary, List<StaffSummary>>(
					PersistenceContext.GetBroker<IStaffBroker>().Find(criteria, request.Page),
					s => assembler.CreateStaffSummary(s, PersistenceContext)));
		}
        public GetConversationEditorFormDataResponse GetConversationEditorFormData(
            GetConversationEditorFormDataRequest request)
        {
            var staffAssembler = new StaffAssembler();
            var groupAssembler = new StaffGroupAssembler();
            var response       = new GetConversationEditorFormDataResponse(
                CollectionUtils.Map(
                    this.CurrentUserStaff.ActiveGroups,                         // only active staff groups should be choices
                    (StaffGroup sg) => groupAssembler.CreateSummary(sg)));

            if (request.RecipientStaffIDs != null && request.RecipientStaffIDs.Count > 0)
            {
                var criteria = new StaffSearchCriteria();
                criteria.Id.In(request.RecipientStaffIDs);
                response.RecipientStaffs = CollectionUtils.Map(
                    PersistenceContext.GetBroker <IStaffBroker>().Find(criteria),
                    (Staff s) => staffAssembler.CreateStaffSummary(s, PersistenceContext));
            }

            if (request.RecipientStaffGroupNames != null && request.RecipientStaffGroupNames.Count > 0)
            {
                var criteria = new StaffGroupSearchCriteria();
                criteria.Name.In(request.RecipientStaffGroupNames);
                response.RecipientStaffGroups = CollectionUtils.Map(
                    PersistenceContext.GetBroker <IStaffGroupBroker>().Find(criteria),
                    (StaffGroup sg) => groupAssembler.CreateSummary(sg));
            }

            return(response);
        }
示例#6
0
		public LoadStaffForEditResponse LoadStaffForEdit(LoadStaffForEditRequest request)
		{
			var s = PersistenceContext.Load<Staff>(request.StaffRef);

			// ensure user has access to edit this staff
			CheckReadAccess(s);

			var assembler = new StaffAssembler();
			return new LoadStaffForEditResponse(assembler.CreateStaffDetail(s, this.PersistenceContext));
		}
示例#7
0
        public LoadStaffForEditResponse LoadStaffForEdit(LoadStaffForEditRequest request)
        {
            var s = PersistenceContext.Load <Staff>(request.StaffRef);

            // ensure user has access to edit this staff
            CheckReadAccess(s);

            var assembler = new StaffAssembler();

            return(new LoadStaffForEditResponse(assembler.CreateStaffDetail(s, this.PersistenceContext)));
        }
示例#8
0
		public CannedTextSummary GetCannedTextSummary(CannedText cannedText, IPersistenceContext context)
		{
			StaffAssembler staffAssembler = new StaffAssembler();
			StaffGroupAssembler groupAssembler = new StaffGroupAssembler();

			return new CannedTextSummary(
				cannedText.GetRef(),
				cannedText.Name,
				cannedText.Category,
				cannedText.Staff == null ? null : staffAssembler.CreateStaffSummary(cannedText.Staff, context),
				cannedText.StaffGroup == null ? null : groupAssembler.CreateSummary(cannedText.StaffGroup),
				cannedText.Text);
		}
示例#9
0
        public CannedTextSummary GetCannedTextSummary(CannedText cannedText, IPersistenceContext context)
        {
            StaffAssembler      staffAssembler = new StaffAssembler();
            StaffGroupAssembler groupAssembler = new StaffGroupAssembler();

            return(new CannedTextSummary(
                       cannedText.GetRef(),
                       cannedText.Name,
                       cannedText.Category,
                       cannedText.Staff == null ? null : staffAssembler.CreateStaffSummary(cannedText.Staff, context),
                       cannedText.StaffGroup == null ? null : groupAssembler.CreateSummary(cannedText.StaffGroup),
                       cannedText.Text));
        }
示例#10
0
        /// <summary>
        /// Create worklist summary.
        /// </summary>
        /// <param name="worklist"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public WorklistAdminSummary CreateWorklistSummary(Worklist worklist, IPersistenceContext context)
        {
            var isStatic = Worklist.GetIsStatic(worklist.GetClass());

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

            return(new WorklistAdminSummary(
                       isStatic ? null : worklist.GetRef(),
                       isStatic ? Worklist.GetDisplayName(worklist.GetClass()) : worklist.Name,
                       isStatic ? Worklist.GetDescription(worklist.GetClass()) : worklist.Description,
                       CreateClassSummary(worklist.GetClass()),
                       worklist.Owner.IsStaffOwner ? staffAssembler.CreateStaffSummary(worklist.Owner.Staff, context) : null,
                       worklist.Owner.IsGroupOwner ? groupAssembler.CreateSummary(worklist.Owner.Group) : null));
        }
示例#11
0
        public TextQueryResponse <StaffSummary> TextQuery(StaffTextQueryRequest request)
        {
            var broker    = PersistenceContext.GetBroker <IStaffBroker>();
            var assembler = new StaffAssembler();

            var helper = new TextQueryHelper <Staff, StaffSearchCriteria, StaffSummary>(
                delegate
            {
                var rawQuery = request.TextQuery;

                // this will hold all criteria
                var criteria = new List <StaffSearchCriteria>();

                // build criteria against names
                var names = TextQueryHelper.ParsePersonNames(rawQuery);
                criteria.AddRange(CollectionUtils.Map(names,
                                                      (PersonName n) =>
                {
                    var sc = new StaffSearchCriteria();
                    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,
                                                      (string word) =>
                {
                    var c = new StaffSearchCriteria();
                    c.Id.StartsWith(word);
                    return(c);
                }));


                ApplyStaffTypesFilter(request.StaffTypesFilter, criteria);

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

            return(helper.Query(request));
        }
示例#12
0
        private static WorklistAdminDetail.StaffList GetFilterSummary(WorklistStaffFilter filter, IPersistenceContext context)
        {
            if (!filter.IsEnabled)
            {
                return(new WorklistAdminDetail.StaffList());
            }

            var assembler = new StaffAssembler();

            return(new WorklistAdminDetail.StaffList
            {
                Staff = CollectionUtils.Map(filter.Values,
                                            (Staff staff) => assembler.CreateStaffSummary(staff, context)),
                IncludeCurrentUser = filter.IncludeCurrentStaff
            });
        }
        public OrderNoteboxItemSummary CreateSummary(OrderNoteboxItem item, IPersistenceContext context)
        {
            var mrnAssembler   = new MrnAssembler();
            var nameAssembler  = new PersonNameAssembler();
            var staffAssembler = new StaffAssembler();
            var groupAssembler = new StaffGroupAssembler();

            var staffRecipients = new List <StaffSummary>();
            var groupRecipients = new List <StaffGroupSummary>();

            foreach (var recipient in item.Recipients)
            {
                if (recipient is Staff)
                {
                    staffRecipients.Add(staffAssembler.CreateStaffSummary((Staff)recipient, context));
                }
                if (recipient is StaffGroup)
                {
                    groupRecipients.Add(groupAssembler.CreateSummary((StaffGroup)recipient));
                }
            }

            return(new OrderNoteboxItemSummary(
                       item.NoteRef,
                       item.OrderRef,
                       item.PatientRef,
                       item.PatientProfileRef,
                       mrnAssembler.CreateMrnDetail(item.Mrn),
                       nameAssembler.CreatePersonNameDetail(item.PatientName),
                       item.DateOfBirth,
                       item.AccessionNumber,
                       item.DiagnosticServiceName,
                       item.Category,
                       item.Urgent,
                       item.PostTime,
                       staffAssembler.CreateStaffSummary(item.Author, context),
                       item.OnBehalfOfGroup == null ? null : groupAssembler.CreateSummary(item.OnBehalfOfGroup),
                       item.IsAcknowledged,
                       staffRecipients,
                       groupRecipients));
        }
示例#14
0
        // note: this operation is not protected with ClearCanvas.Ris.Application.Common.AuthorityTokens.StaffAdmin
        // because it is used in non-admin situations - perhaps we need to create a separate operation???
        public ListStaffResponse ListStaff(ListStaffRequest request)
        {
            var assembler = new StaffAssembler();

            var criteria = new StaffSearchCriteria();

            criteria.Name.FamilyName.SortAsc(0);

            if (!string.IsNullOrEmpty(request.StaffID))
            {
                ApplyCondition(criteria.Id, request.StaffID, request.ExactMatch);
            }

            if (!string.IsNullOrEmpty(request.GivenName))
            {
                ApplyCondition(criteria.Name.GivenName, request.GivenName, request.ExactMatch);
            }

            if (!string.IsNullOrEmpty(request.FamilyName))
            {
                ApplyCondition(criteria.Name.FamilyName, request.FamilyName, request.ExactMatch);
            }

            if (!string.IsNullOrEmpty(request.UserName))
            {
                criteria.UserName.EqualTo(request.UserName);
            }

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

            ApplyStaffTypesFilter(request.StaffTypesFilter, new [] { criteria });

            return(new ListStaffResponse(
                       CollectionUtils.Map <Staff, StaffSummary, List <StaffSummary> >(
                           PersistenceContext.GetBroker <IStaffBroker>().Find(criteria, request.Page),
                           s => assembler.CreateStaffSummary(s, PersistenceContext))));
        }
示例#15
0
        public LoadStaffGroupEditorFormDataResponse LoadStaffGroupEditorFormData(LoadStaffGroupEditorFormDataRequest request)
        {
            var allStaff = PersistenceContext.GetBroker <IStaffBroker>().FindAll(false);

            var worklistClasses = WorklistAdminService.ListClassesHelper(null, null, false);

            // grab the persistent worklists
            var broker = PersistenceContext.GetBroker <IWorklistBroker>();
            var persistentClassNames =
                CollectionUtils.Select(worklistClasses, t => !Worklist.GetIsStatic(t))
                .ConvertAll(t => Worklist.GetClassName(t));

            var adminWorklists = broker.Find(null, false, persistentClassNames, null);

            var staffAssembler    = new StaffAssembler();
            var worklistAssembler = new WorklistAssembler();

            return(new LoadStaffGroupEditorFormDataResponse(
                       CollectionUtils.Map(allStaff, (Staff staff) => staffAssembler.CreateStaffSummary(staff, PersistenceContext)),
                       CollectionUtils.Map(adminWorklists, (Worklist worklist) => worklistAssembler.GetWorklistSummary(worklist, PersistenceContext))
                       ));
        }
        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);
        }
示例#17
0
        public LoadStaffGroupEditorFormDataResponse LoadStaffGroupEditorFormData(LoadStaffGroupEditorFormDataRequest request)
        {
			var allStaff = PersistenceContext.GetBroker<IStaffBroker>().FindAll(false);

			var worklistClasses = WorklistAdminService.ListClassesHelper(null, null, false);

			// grab the persistent worklists
			var broker = PersistenceContext.GetBroker<IWorklistBroker>();
			var persistentClassNames = 
				CollectionUtils.Select(worklistClasses, t => !Worklist.GetIsStatic(t))
				.ConvertAll(t => Worklist.GetClassName(t));

			var adminWorklists = broker.Find(null, false, persistentClassNames, null);
			
			var staffAssembler = new StaffAssembler();
			var worklistAssembler = new WorklistAssembler();
            return new LoadStaffGroupEditorFormDataResponse(
                CollectionUtils.Map(allStaff, (Staff staff) => staffAssembler.CreateStaffSummary(staff, PersistenceContext)),
				CollectionUtils.Map(adminWorklists, (Worklist worklist) => worklistAssembler.GetWorklistSummary(worklist, PersistenceContext))
				);
        }
示例#18
0
		private StaffSummary GetUniqueAssignedInterpreter(Order order)
		{
			StaffSummary uniqueAssignedInterpreter = null;
			var staffAssembler = new StaffAssembler();

			// establish whether there is a unique assigned interpreter for all procedures
			var interpreters = new HashedSet<Staff>();
			foreach (var procedure in order.Procedures)
			{
				var pendingInterpretationStep = procedure.GetProcedureStep(
					ps => ps.Is<InterpretationStep>() && ps.State == ActivityStatus.SC);

				if (pendingInterpretationStep != null && pendingInterpretationStep.AssignedStaff != null)
					interpreters.Add(pendingInterpretationStep.AssignedStaff);
			}

			if (interpreters.Count == 1)
			{
				uniqueAssignedInterpreter = staffAssembler.CreateStaffSummary(
					CollectionUtils.FirstElement(interpreters),
					this.PersistenceContext);
			}

			return uniqueAssignedInterpreter;
		}
示例#19
0
		public AddStaffResponse AddStaff(AddStaffRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.StaffDetail, "StaffDetail");

			// if trying to associate with a user account, check the account is free
			if(!string.IsNullOrEmpty(request.StaffDetail.UserName))
			{
				ValidateUserNameFree(request.StaffDetail.UserName);
			}

			// create new staff
			var staff = new Staff();

			// set properties from request
			var assembler = new StaffAssembler();

			var groupsEditable = Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup);
			assembler.UpdateStaff(request.StaffDetail,
				staff,
				groupsEditable,
				groupsEditable,
				PersistenceContext);

			PersistenceContext.Lock(staff, DirtyState.New);

			// ensure the new staff is assigned an OID before using it in the return value
			PersistenceContext.SynchState();

			return new AddStaffResponse(assembler.CreateStaffSummary(staff, PersistenceContext));
		}
示例#20
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);
        }
		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;
		}
示例#22
0
		public UpdateStaffResponse UpdateStaff(UpdateStaffRequest request)
		{
			Platform.CheckForNullReference(request, "request");
			Platform.CheckMemberIsSet(request.StaffDetail, "StaffDetail");

			var staff = PersistenceContext.Load<Staff>(request.StaffDetail.StaffRef);

			// ensure user has access to edit this staff
			CheckWriteAccess(staff);

			// if trying to associate with a new user account, check the account is free
			if (!string.IsNullOrEmpty(request.StaffDetail.UserName) && request.StaffDetail.UserName != staff.UserName)
			{
				ValidateUserNameFree(request.StaffDetail.UserName);
			}

			var assembler = new StaffAssembler();
			assembler.UpdateStaff(request.StaffDetail,
				staff,
				request.UpdateElectiveGroups && (Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup) || staff.UserName == this.CurrentUser),
				request.UpdateNonElectiveGroups && Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup),
				PersistenceContext);

			return new UpdateStaffResponse(assembler.CreateStaffSummary(staff, PersistenceContext));
		}
示例#23
0
		public TextQueryResponse<StaffSummary> TextQuery(StaffTextQueryRequest request)
		{
			var broker = PersistenceContext.GetBroker<IStaffBroker>();
			var assembler = new StaffAssembler();

			var helper = new TextQueryHelper<Staff, StaffSearchCriteria, StaffSummary>(
                    delegate
					{
                        var rawQuery = request.TextQuery;

						// this will hold all criteria
						var criteria = new List<StaffSearchCriteria>();

						// build criteria against names
						var names = TextQueryHelper.ParsePersonNames(rawQuery);
						criteria.AddRange(CollectionUtils.Map(names,
							(PersonName n) =>
							{
								var sc = new StaffSearchCriteria();
								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,
									 (string word) =>
									 {
										 var c = new StaffSearchCriteria();
										 c.Id.StartsWith(word);
										 return c;
									 }));


						ApplyStaffTypesFilter(request.StaffTypesFilter, criteria);

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

			return helper.Query(request);
		}