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));
        }
        private List <PriorProcedureSummary> LoadPriors(bool relevantOnly)
        {
            GetPriorsResponse response = null;

            Platform.GetService <IReportingWorkflowService>(service =>
            {
                var request = new GetPriorsRequest {
                    RelevantOnly = relevantOnly
                };

                // ReportRef will be null when used from Protocolling component
                if (this.ReportRef != null)
                {
                    request.ReportRef = this.ReportRef;
                }
                else
                {
                    request.OrderRef = _worklistItem.OrderRef;
                }

                response = service.GetPriors(request);
            });
            return(response.Reports);
        }