private static OperationData Capture(DiscontinueModalityPerformedProcedureStepRequest request, IPersistenceContext persistenceContext) { var mpps = persistenceContext.Load<ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef, EntityLoadFlags.None); var procedures = mpps.Activities.Select(a => a.Downcast<ModalityProcedureStep>().Procedure).ToList(); var order = procedures.First().Order; var patientProfile = procedures.First().PatientProfile; return new OperationData(Operations.Discontinue, patientProfile, order, procedures); }
public DiscontinueModalityPerformedProcedureStepResponse DiscontinueModalityPerformedProcedureStep(DiscontinueModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load<ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new DiscontinueModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.DiscontinuedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // If discontinuing the MPPS caused any associated procedures to be discontinued, // create an HL7 event. foreach (var activity in mpps.Activities) { var procedure = activity.As<ProcedureStep>().Procedure; if(procedure.IsTerminated) LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } // Drill back to order so we can refresh procedure plan var order = CollectionUtils.FirstElement(mpps.Activities).As<ProcedureStep>().Procedure.Order; var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return new DiscontinueModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext)); }