예제 #1
0
 public DicomSeriesSynchronizeHelper(DicomSeriesAssembler assembler, ModalityPerformedProcedureStep mpps, IPersistenceContext context)
     : base(true, true)
 {
     _assembler = assembler;
     _mpps      = mpps;
     _context   = context;
 }
예제 #2
0
        private DicomSeries CreateDicomSeries(DicomSeriesDetail detail, ModalityPerformedProcedureStep mpps)
        {
            DicomSeries newSeries = new DicomSeries();

            newSeries.ModalityPerformedProcedureStep = mpps;
            UpdateDicomSeries(newSeries, detail);
            return(newSeries);
        }
        private static int QueryDocumentation(Order order, out bool hasIncompleteDicomSeries)
        {
            List <DicomSeries> dicomSeries = new List <DicomSeries>();
            bool isMissingDicomSeries      = false;

            // Find all the DicomSeries for this order
            CollectionUtils.ForEach(order.Procedures,
                                    delegate(Procedure procedure)
            {
                CollectionUtils.ForEach(procedure.ModalityProcedureSteps,
                                        delegate(ModalityProcedureStep mps)
                {
                    List <PerformedStep> mppsList = CollectionUtils.Select(mps.PerformedSteps,
                                                                           delegate(PerformedStep ps) { return(ps.Is <ModalityPerformedProcedureStep>()); });

                    if (mppsList.Count == 0)
                    {
                        isMissingDicomSeries = true;
                    }
                    else
                    {
                        CollectionUtils.ForEach(mps.PerformedSteps,
                                                delegate(PerformedStep ps)
                        {
                            if (ps.Is <ModalityPerformedProcedureStep>())
                            {
                                ModalityPerformedProcedureStep mpps = ps.As <ModalityPerformedProcedureStep>();
                                if (mpps.DicomSeries == null || mpps.DicomSeries.Count == 0)
                                {
                                    isMissingDicomSeries = true;
                                }
                                else
                                {
                                    dicomSeries.AddRange(mpps.DicomSeries);
                                }
                            }
                        });
                    }
                });
            });

            // Sum the number of instances for all DicomSeries
            hasIncompleteDicomSeries = isMissingDicomSeries;
            int numberOfInstancesFromDocumentation = CollectionUtils.Reduce <DicomSeries, int>(
                dicomSeries, 0,
                delegate(DicomSeries series, int totalInstances)
            {
                return(totalInstances + series.NumberOfSeriesRelatedInstances);
            });

            return(numberOfInstancesFromDocumentation);
        }
예제 #4
0
        private void LoadTree()
        {
            Type     type = typeof(ModalityPerformedProcedureStep);
            TreeNode node = new TreeNode("Modality Performed Procedure Step");
            ModalityPerformedProcedureStep mpps = new ModalityPerformedProcedureStep();

            mpps.ScheduledStepAttributeSequence.Add(new ScheduledStepAttribute());
            mpps.ScheduledStepAttributeSequence[0].RequestedProcedureCodeSequence.Add(new CodeSequence());
            BuildNode(mpps, type, ref node);
            treeViewDataset.Nodes.Add(node);
            treeViewDataset.ExpandAll();
            RemoveNodeCheckBox(node);
            BuildDataSet();
        }
예제 #5
0
        public void Execute(ModalityPerformedProcedureStep mpps, DateTime?time, IWorkflow workflow)
        {
            TerminatePerformedProcedureStep(mpps, time);

            var oneMps = CollectionUtils.FirstElement <ProcedureStep>(mpps.Activities).As <ModalityProcedureStep>();
            var order  = oneMps.Procedure.Order;

            // try to complete any mps that have all mpps completed
            foreach (var rp in order.Procedures)
            {
                if (rp.Status != ProcedureStatus.IP)
                {
                    continue;
                }

                TryAutoTerminateProcedureSteps(rp, time, workflow);
                TryAutoCheckOut(rp, time);
            }
        }
예제 #6
0
        private void BuildDataSet()
        {
            using (DicomDataSet ds = new DicomDataSet())
            {
                ModalityPerformedProcedureStep mpps = new ModalityPerformedProcedureStep();

                ds.Initialize(DicomClassType.Undefined, DicomDataSetInitializeType.ExplicitVRLittleEndian);
                ds.Set(new BeforeAddTagDelegate(OnBeforeAdd), mpps);

                treeViewMPPSDataset.BeginUpdate();
                treeViewMPPSDataset.Nodes.Clear();
                try
                {
                    FillTree(ds);
                }
                finally
                {
                    treeViewMPPSDataset.EndUpdate();
                }
            }
        }
예제 #7
0
        public ModalityPerformedProcedureStep Execute(IList <ModalityProcedureStep> modalitySteps, DateTime?startTime, Staff technologist, IWorkflow workflow)
        {
            if (modalitySteps.Count == 0)
            {
                throw new WorkflowException("At least one procedure step is required.");
            }

            // validate that each mps being started is being performed on the same modality
            if (!CollectionUtils.TrueForAll(modalitySteps, step => step.Modality.Equals(modalitySteps[0].Modality)))
            {
                throw new WorkflowException("Procedure steps cannot be started together because they are not on the same modality.");
            }

            // create an mpps
            var mpps = new ModalityPerformedProcedureStep(technologist, startTime);

            workflow.AddEntity(mpps);

            foreach (var mps in modalitySteps)
            {
                mps.Start(technologist, startTime);
                mps.AddPerformedStep(mpps);

                //note: this feature was disabled by request (see #2138) - they want to enforce explicit check-in
                //AutoCheckIn(mps.Procedure, startTime);
            }

            // Create Documentation Step for each RP that has an MPS started by this service call
            foreach (var step in modalitySteps)
            {
                if (step.Procedure.DocumentationProcedureStep == null)
                {
                    ProcedureStep docStep = new DocumentationProcedureStep(step.Procedure);
                    docStep.Start(technologist, startTime);
                    workflow.AddEntity(docStep);
                }
            }

            return(mpps);
        }
예제 #8
0
파일: Operations.cs 프로젝트: nhannd/Xian
		public ModalityPerformedProcedureStep Execute(IList<ModalityProcedureStep> modalitySteps, DateTime? startTime, Staff technologist, IWorkflow workflow)
		{
			if (modalitySteps.Count == 0)
				throw new WorkflowException("At least one procedure step is required.");

			// validate that each mps being started is being performed on the same modality
			if (!CollectionUtils.TrueForAll(modalitySteps, step => step.Modality.Equals(modalitySteps[0].Modality)))
			{
				throw new WorkflowException("Procedure steps cannot be started together because they are not on the same modality.");
			}

			// create an mpps
			var mpps = new ModalityPerformedProcedureStep(technologist, startTime);
			workflow.AddEntity(mpps);

			foreach (var mps in modalitySteps)
			{
				mps.Start(technologist, startTime);
				mps.AddPerformedStep(mpps);

				//note: this feature was disabled by request (see #2138) - they want to enforce explicit check-in
				//AutoCheckIn(mps.Procedure, startTime);
			}

			// Create Documentation Step for each RP that has an MPS started by this service call
			foreach (var step in modalitySteps)
			{
				if (step.Procedure.DocumentationProcedureStep == null)
				{
					ProcedureStep docStep = new DocumentationProcedureStep(step.Procedure);
					docStep.Start(technologist, startTime);
					workflow.AddEntity(docStep);
				}
			}

			return mpps;
		}
예제 #9
0
        public void SynchronizeDicomSeries(ModalityPerformedProcedureStep mpps, IList <DicomSeriesDetail> sourceList, IPersistenceContext context)
        {
            DicomSeriesSynchronizeHelper synchronizer = new DicomSeriesSynchronizeHelper(this, mpps, context);

            synchronizer.Synchronize(mpps.DicomSeries, sourceList);
        }
예제 #10
0
 protected override void TerminatePerformedProcedureStep(ModalityPerformedProcedureStep mpps, DateTime?time)
 {
     mpps.Discontinue(time);
 }
예제 #11
0
 protected abstract void TerminatePerformedProcedureStep(ModalityPerformedProcedureStep mpps, DateTime?time);
        public ModalityPerformedProcedureStepDetail CreateModalityPerformedProcedureStepDetail(ModalityPerformedProcedureStep mpps, IPersistenceContext context)
        {
            var assembler = new ModalityProcedureStepAssembler();

            // include the details of each MPS in the mpps summary
            var mpsDetails = CollectionUtils.Map(mpps.Activities,
                                                 (ProcedureStep mps) => assembler.CreateProcedureStepSummary(mps.As <ModalityProcedureStep>(), context));

            var dicomSeriesAssembler = new DicomSeriesAssembler();
            var dicomSeries          = dicomSeriesAssembler.GetDicomSeriesDetails(mpps.DicomSeries);

            StaffSummary mppsPerformer = null;
            var          performer     = mpps.Performer as ProcedureStepPerformer;

            if (performer != null)
            {
                var staffAssembler = new StaffAssembler();
                mppsPerformer = staffAssembler.CreateStaffSummary(performer.Staff, context);
            }

            return(new ModalityPerformedProcedureStepDetail(
                       mpps.GetRef(),
                       EnumUtils.GetEnumValueInfo(mpps.State, context),
                       mpps.StartTime,
                       mpps.EndTime,
                       mppsPerformer,
                       mpsDetails,
                       dicomSeries,
                       ExtendedPropertyUtils.Copy(mpps.ExtendedProperties)));
        }
예제 #13
0
파일: Operations.cs 프로젝트: nhannd/Xian
		protected override void TerminatePerformedProcedureStep(ModalityPerformedProcedureStep mpps, DateTime? time)
		{
			mpps.Discontinue(time);
		}
예제 #14
0
파일: Operations.cs 프로젝트: nhannd/Xian
		protected abstract void TerminatePerformedProcedureStep(ModalityPerformedProcedureStep mpps, DateTime? time);
예제 #15
0
파일: Operations.cs 프로젝트: nhannd/Xian
		public void Execute(ModalityPerformedProcedureStep mpps, DateTime? time, IWorkflow workflow)
		{
			TerminatePerformedProcedureStep(mpps, time);

			var oneMps = CollectionUtils.FirstElement<ProcedureStep>(mpps.Activities).As<ModalityProcedureStep>();
			var order = oneMps.Procedure.Order;

			// try to complete any mps that have all mpps completed
			foreach (var rp in order.Procedures)
			{
				if (rp.Status != ProcedureStatus.IP)
					continue;

				TryAutoTerminateProcedureSteps(rp, time, workflow);
				TryAutoCheckOut(rp, time);
			}
		}