public AddWorklistResponse AddWorklist(AddWorklistRequest request)
        {
            if (string.IsNullOrEmpty(request.Detail.Name))
            {
                throw new RequestValidationException(SR.ExceptionWorklistNameRequired);
            }

            // create instance of worklist owner
            var owner = CreateOwner(request.Detail, request.IsUserWorklist);

            // ensure user has access to create this worklist
            CheckAccess(owner);

            CheckWorklistCountRestriction(owner);

            // create instance of appropriate class
            var worklist = WorklistFactory.Instance.CreateWorklist(request.Detail.WorklistClass.ClassName);

            // set owner
            worklist.Owner = owner;

            // update properties
            UpdateWorklistHelper(request.Detail, worklist);

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

            var adminAssembler = new WorklistAdminAssembler();

            return(new AddWorklistResponse(adminAssembler.CreateWorklistSummary(worklist, this.PersistenceContext)));
        }
        public ListWorklistsResponse ListWorklists(ListWorklistsRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            var worklistClasses = ListClassesHelper(request.ClassNames, request.Categories, request.IncludeStatic);

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

            var worklists = broker.Find(request.WorklistName, request.IncludeUserDefinedWorklists, persistentClassNames, request.Page);

            // optionally include the static ones
            if (request.IncludeStatic)
            {
                foreach (var worklistClass in worklistClasses)
                {
                    if (Worklist.GetIsStatic(worklistClass))
                    {
                        worklists.Add(WorklistFactory.Instance.CreateWorklist(worklistClass));
                    }
                }
            }

            var adminAssembler = new WorklistAdminAssembler();

            return(new ListWorklistsResponse(
                       CollectionUtils.Map <Worklist, WorklistAdminSummary, List <WorklistAdminSummary> >(
                           worklists,
                           worklist => adminAssembler.CreateWorklistSummary(worklist, this.PersistenceContext))));
        }
        public LoadWorklistForEditResponse LoadWorklistForEdit(LoadWorklistForEditRequest request)
        {
            var worklist = PersistenceContext.Load <Worklist>(request.EntityRef);

            var adminAssembler = new WorklistAdminAssembler();
            var adminDetail    = adminAssembler.CreateWorklistDetail(worklist, this.PersistenceContext);

            return(new LoadWorklistForEditResponse(worklist.GetRef(), adminDetail));
        }
        private void UpdateWorklistHelper(WorklistAdminDetail detail, Worklist worklist)
        {
            var adminAssembler = new WorklistAdminAssembler();

            adminAssembler.UpdateWorklist(
                worklist,
                detail,
                worklist.Owner.IsAdminOwner,                    // only update subscribers iff the worklist is admin owned
                this.PersistenceContext);
        }
        public ListWorklistClassesResponse ListWorklistClasses(ListWorklistClassesRequest request)
        {
            Platform.CheckForNullReference(request, "request");

            var worklistClasses =
                ListClassesHelper(request.ClassNames, request.Categories, request.IncludeStatic);

            var assembler = new WorklistAdminAssembler();

            return(new ListWorklistClassesResponse(
                       CollectionUtils.Map <Type, WorklistClassSummary>(worklistClasses,
                                                                        assembler.CreateClassSummary)));
        }
        public UpdateWorklistResponse UpdateWorklist(UpdateWorklistRequest request)
        {
            var worklist = this.PersistenceContext.Load <Worklist>(request.EntityRef);

            // check if user can update
            CheckAccess(worklist.Owner);

            // update
            UpdateWorklistHelper(request.Detail, worklist);

            var adminAssembler = new WorklistAdminAssembler();

            return(new UpdateWorklistResponse(adminAssembler.CreateWorklistSummary(worklist, this.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);
        }