コード例 #1
0
        public void ClassSetUp()
        {
            _factory = new MockRepository(MockBehavior.Loose);

            _reportsUnitOfWork       = _factory.Create <IReportsUnitOfWork>();
            _summariesUnitOfWork     = _factory.Create <ISummariesUnitOfWork>();
            _classicImagesRepository = _factory.Create <IClassicImagesRepository>();
            _reportDerived           = new ReportDerived(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), ModuleType.Incident, true);
            _case                       = new Domain.Summaries.Case.Case(Guid.NewGuid(), Guid.NewGuid(), "number");
            _summaryDerived             = new SummaryDerived(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), ModuleType.Incident, "number", _case);
            _reportAttachment           = new ReportAttachment(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());
            _reportAttachment.FileName  = FileName;
            _reportAttachment.Source    = "InformRMSWeb";
            _summaryAttachment          = new SummaryAttachment(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());
            _summaryAttachment.FileName = FileName;
            _summaryAttachment.Source   = "InformRMSWeb";
            _reportsUnitOfWork.Setup(mock => mock.Find <ReportAttachment>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_reportAttachment);

            _reportsUnitOfWork.Setup(mock => mock.Find <Report>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_reportDerived);
            _summariesUnitOfWork.Setup(mock => mock.Find <Summary>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_summaryDerived);
            _summariesUnitOfWork.Setup(mock => mock.Find <SummaryAttachment>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_summaryAttachment);
            _attachmentQueryService = new AttachmentQueryService(_reportsUnitOfWork.Object, _summariesUnitOfWork.Object, _classicImagesRepository.Object, Mock.Of <ILog>(),
                                                                 Mock.Of <IServiceAuthorizationPolicy>(), Mock.Of <IServiceIdentityProvider>());
        }
コード例 #2
0
        private void SetUpAttachmentToReport()
        {
            _reportsUnitOfWork.Setup(mock => mock.Find <Report>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>())).Returns(_report);
            var attachment = new ReportAttachment(DataEntryUnitTestFixture.IdentityId, DataEntryUnitTestFixture.AgencyDetails.Id, Guid.NewGuid());

            attachment.Source = AttachmentDescription.OfficerReport.GetDescription();
            _report.Attachments.Add(attachment);
            _attachmentId = attachment.Id;
        }
コード例 #3
0
        public async Task <ActionResult> Add(ReportAttachmentInsertDto attachment)
        {
            ReportAttachment newAttachment = _mapper.Map <ReportAttachment>(attachment);

            await _repository.Add(newAttachment);

            if (ValidOperation())
            {
            }
            return(Ok());
        }
コード例 #4
0
        public bool Delete(ReportAttachment model)
        {
            var containerName = ConfigUtil.ReportAttachmentStorageContainerName;
            var reportGuid    = _reportRepository.GetReportGuid(model.CompanyId, model.ReportId);
            var blobName      = (model.AreaId.HasValue) ? string.Format("{0}/{1}/{2}", reportGuid, model.AreaId, model.FileName) : string.Format("{0}/{1}", reportGuid, model.FileName);

            _cloudStorage.DeleteBlob(containerName, blobName);
            _reportAttachmentRepository.Delete(model.Id);

            return(true);
        }
コード例 #5
0
        public ReportAttachment Create(ReportAttachment model, Stream fileToBeUploaded)
        {
            var containerName = ConfigUtil.ReportAttachmentStorageContainerName;
            var reportGuid    = _reportRepository.GetReportGuid(model.CompanyId, model.ReportId);
            var blobName      = (model.AreaId.HasValue) ? string.Format("{0}/{1}/{2}", reportGuid, model.AreaId, model.FileName) : string.Format("{0}/{1}", reportGuid, model.FileName);

            model.FilePath = _cloudStorage.SaveBlob(containerName, blobName, fileToBeUploaded);

            var newReportAttachment = _reportAttachmentRepository.Create(model);

            return(newReportAttachment);
        }
コード例 #6
0
        public ActionResult AttachFile(int year, int month, Guid areaUniqueId, string fileDescription, HttpPostedFileBase newAttachment)
        {
            if (ModelState.IsValid)
            {
                if (newAttachment != null && newAttachment.ContentLength > 0)
                {
                    ListHelper.InitializeAreas(CurrentUser);
                    int?areaId = null;
                    if (areaUniqueId != Guid.Empty)
                    {
                        areaId = ListHelper.GetAreas().SingleOrDefault(a => a.UniqueId == areaUniqueId).Id;
                    }
                    if (!CurrentUser.IsCompanyAdmin && !CurrentUser.AccessibleAreaIds.Contains(areaId.Value))
                    {
                        throw new HttpException(400, "Bad Request");
                    }
                    var reportDate = new DateTime(year, month, 1);
                    var reportId   = _reportManager.GetReportId(CompanyId, reportDate);

                    if (!_reportAttachmentManager.IsFilenameUnique(new ReportAttachment
                    {
                        CompanyId = CompanyId,
                        ReportId = reportId,
                        FileName = newAttachment.FileName,
                        AreaId = areaId
                    }))
                    {
                        return(Json(new { success = false, error = "A file with this name already exists. Delete it before trying to replace it." }));
                    }

                    var attachment = new ReportAttachment
                    {
                        CompanyId   = CompanyId,
                        ReportId    = reportId,
                        FileName    = newAttachment.FileName,
                        Description = fileDescription,
                        MimeType    = newAttachment.ContentType,
                        AreaId      = areaId
                    };
                    var model = _reportAttachmentManager.Create(attachment, newAttachment.InputStream);
                    var html  = ViewToString("_Attachment_Row", model);
                    return(Json(new { success = true, html = html }));
                }
            }
            else
            {
                return(Json(new { success = false, error = "File attachment failed, try again." }));
            }
            return(Json(new { success = false, error = "File attachment failed, try again." }));
        }
コード例 #7
0
        public bool IsFilenameUnique(ReportAttachment reportAttachment)
        {
            var existingFile = _reportAttachmentRepository.GetList(
                new
            {
                CompanyId = reportAttachment.CompanyId,
                ReportId  = reportAttachment.ReportId,
                FileName  = reportAttachment.FileName,
                AreaId    = reportAttachment.AreaId
            }
                ).FirstOrDefault();

            return(existingFile == null);
        }
コード例 #8
0
        public void ClassSetUp()
        {
            _identityId = Guid.NewGuid();
            var identityContext = new IdentityContext()
            {
                IdentityId = Guid.NewGuid()
            };

            _authorizationPolicy = new Mock <IServiceAuthorizationPolicy>();
            _authorizationPolicy.Setup(mock => mock.RequireViewPermissions(It.IsAny <IdentityContext>(), It.IsAny <Guid>(), It.IsAny <ModuleType>()));
            _identityProvider = new Mock <IServiceIdentityProvider>();
            _identityProvider.Setup(x => x.GetPrincipalIdentifier()).Returns(identityContext.IdentityId);
            _identityProvider.Setup(x => x.GetIdentityContext()).Returns(identityContext);

            _factory = new MockRepository(MockBehavior.Loose);

            _reportDerived     = new ReportDerived(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), ModuleType.Incident, true);
            _case              = new Domain.Summaries.Case.Case(Guid.NewGuid(), Guid.NewGuid(), "number");
            _summaryDerived    = new SummaryDerived(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), ModuleType.Incident, "number", _case);
            _reportAttachment  = new ReportAttachment(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());
            _summaryAttachment = new SummaryAttachment(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());
            //_eventDispatcher = _factory.Create<IEventDispatcher>();
            _messageBusClient = _factory.Create <IMessageBusPublishClient>();

            //MessageBus.SetInstance( //_eventDispatcher.Object, _messageBusClient.Object );
            //_eventDispatcher.Setup( mock => mock.Publish( It.IsAny<object>() ) );
            _reportsUnitOfWork   = _factory.Create <IReportsUnitOfWork>();
            _summariesUnitOfWork = _factory.Create <ISummariesUnitOfWork>();

            _reportsUnitOfWork.Setup(mock => mock.Find <ReportAttachment>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_reportAttachment);
            _reportsUnitOfWork.Setup(mock => mock.Find <Report>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_reportDerived);
            _summariesUnitOfWork.Setup(mock => mock.Find <SummaryAttachment>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_summaryAttachment);
            _summariesUnitOfWork.Setup(mock => mock.Find <Summary>(It.IsAny <Guid>(), It.IsAny <TrackingMode>(), It.IsAny <ThrowIf>()))
            .Returns(_summaryDerived);

            _reportsUnitOfWork.Setup(x => x.PendingMessages).Returns(new System.Collections.Generic.List <TriTech.InformRMS.Infrastructure.Messaging.Contracts.Messages.Message>());
            _summariesUnitOfWork.Setup(x => x.PendingMessages).Returns(new System.Collections.Generic.List <TriTech.InformRMS.Infrastructure.Messaging.Contracts.Messages.Message>());

            _attachmentCommandService = new AttachmentCommandService(
                _reportsUnitOfWork.Object,
                _summariesUnitOfWork.Object, Mock.Of <ILog>(), _authorizationPolicy.Object, _identityProvider.Object);
        }
コード例 #9
0
        /// <summary>
        /// Add the PDF to Report and Summary
        /// </summary>
        public void AttachOfficerReport(Attachment attachment, Report report, Summary summary)
        {
            //todo: Enable MSDTC?

            var reportAttachment = new ReportAttachment(report.CreatedBy, report.AgencyId, attachment.Id);

            attachment.MapInto(reportAttachment);
            report.Attachments.Add(reportAttachment);
            _rptUoW.Commit();

            var summaryAttachment = new SummaryAttachment(summary.CreatedBy, summary.AgencyId, attachment.Id);

            attachment.MapInto(summaryAttachment);
            summary.Attachments.Add(summaryAttachment);
            _summariesUnitOfWork.Commit();

            // Raise a message indicating that the report has been attached to the summary.
            _summariesUnitOfWork.PendingMessages.Add(DataEntryMessages.EntityCreated(summaryAttachment,
                                                                                     summary.ModuleType, DataEntryAggregateType.Summary));
            _summariesUnitOfWork.PublishPendingMessages();
        }
コード例 #10
0
        public Guid AddAttachmentToReport(Attachment attachment, Guid reportId)
        {
            // Load the Report.
            var report = _rptUoW.Find <Report>(reportId);

            // TODO: Check permissions once we determine module type.

            // Create the Attachment
            var entity = new ReportAttachment(IdentityId, report.AgencyId, attachment.Id);

            attachment.MapInto(entity);
            report.Attachments.Add(entity);

            _rptUoW.Commit();

            // TODO: Hack until the Surrogate Keys are introduced in the Data layer.
            // TODO: Currently the Event messages will get the wrong Id unless they are raised AFTER the database commit
            // TODO: because the database may override the Guid the Domain is trying to use.
            _rptUoW.PendingMessages.Add(DataEntryMessages.EntityCreated(entity, report.ModuleType, DataEntryAggregateType.Report));
            _rptUoW.PublishPendingMessages();

            return(entity.Id);
        }
コード例 #11
0
        /// <summary>
        /// Create a PathologyTransformResult instance (containing a PathologyResultReport and a ReportAttachment instance) from a HL7 V2 pathology message.
        /// The PathologyTransformResult instance is then used to generate a CDA document.
        /// </summary>
        /// <param name="hl7GenericMessage">The HL7 V2 message to transform.</param>
        /// <param name="metadata">Mandatory information to supplement the transform.</param>
        /// <param name="reportData">Report data.</param>
        /// <returns></returns>
        internal PathologyTransformResult Transform(HL7GenericMessage hl7GenericMessage, PathologyMetadata metadata, byte[] reportData = null)
        {
            PathologyResultReport pathologyResultReport = PathologyResultReport.CreatePathologyResultReport();

            // Include Logo
            pathologyResultReport.IncludeLogo = false;

            // Set Creation Time
            pathologyResultReport.DocumentCreationTime = GetResultsReportStatusChange(hl7GenericMessage);

            // Document Status
            pathologyResultReport.DocumentStatus = GetReportStatus(hl7GenericMessage);

            #region Setup and populate the CDA context model

            // CDA Context model
            var cdaContext = PathologyResultReport.CreateCDAContext();

            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);

            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);

            // CDA Context Version
            cdaContext.Version = "1";

            // Legal Authenticator
            cdaContext.LegalAuthenticator = CreateLegalAuthenticator(hl7GenericMessage);

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            ICustodian custodian = BaseCDAModel.CreateParticipantCustodian();
            cdaContext.Custodian.Participant = custodian;

            pathologyResultReport.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model

            // SCS Context model
            pathologyResultReport.SCSContext = PathologyResultReport.CreateSCSContext();

            // Author Health Care Provider
            pathologyResultReport.SCSContext.Author = CreateAuthor(hl7GenericMessage);

            // The Reporting Pathologist
            pathologyResultReport.SCSContext.ReportingPathologist = CreateReportingPathologist(hl7GenericMessage);

            // Order Details
            pathologyResultReport.SCSContext.OrderDetails = CreateOrderDetails(hl7GenericMessage);

            // Subject Of Care
            pathologyResultReport.SCSContext.SubjectOfCare = CreateSubjectOfCare(hl7GenericMessage);

            #endregion

            #region Setup and populate the SCS Content model

            // SCS Content model
            pathologyResultReport.SCSContent = PathologyResultReport.CreateSCSContent();

            ReportAttachment reportAttachment = GetReportAttachment(hl7GenericMessage, reportData);

            // Pathology Test Result
            pathologyResultReport.SCSContent.PathologyTestResult = CreatePathologyTestResults(hl7GenericMessage);

            // Related Document
            pathologyResultReport.SCSContent.RelatedDocument = CreateRelatedDocument(hl7GenericMessage, reportAttachment);

            #endregion

            FillInAdditionalMetadata(pathologyResultReport, metadata);

            return(new PathologyTransformResult
            {
                PathologyResultReport = pathologyResultReport,
                Attachment = reportAttachment
            });
        }
        /// <summary>
        /// Create a DiagnosticImagingTransformResult instance (containing a DiagnosticImagingReport and a ReportAttachment instance) from a
        /// HL7 V2 diagnostic imaging message. The DiagnosticImagingTransformResult instance is then used to generate a CDA document.
        /// </summary>
        /// <param name="hl7GenericMessage">The HL7 V2 message to transform.</param>
        /// <param name="metadata">Mandatory information to supplement the transform.</param>
        /// <param name="reportData">Report data.</param>
        /// <returns></returns>
        internal DiagnosticImagingTransformResult Transform(HL7GenericMessage hl7GenericMessage, DiagnosticImagingMetadata metadata, byte[] reportData = null)
        {
            DiagnosticImagingReport diagnosticImagingReport = DiagnosticImagingReport.CreateDiagnosticImagingReport();

            // Include Logo
            diagnosticImagingReport.IncludeLogo = false;

            // Set Creation Time
            diagnosticImagingReport.DocumentCreationTime = GetResultsReportStatusChange(hl7GenericMessage);

            // Document Status
            diagnosticImagingReport.DocumentStatus = GetReportStatus(hl7GenericMessage);

            #region Setup and populate the CDA context model

            // CDA Context model
            var cdaContext = DiagnosticImagingReport.CreateCDAContext();

            // Document Id
            cdaContext.DocumentId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateOid(), null);

            // Set Id
            cdaContext.SetId = BaseCDAModel.CreateIdentifier(BaseCDAModel.CreateGuid(), null);

            // CDA Context Version
            cdaContext.Version = "1";

            // Legal Authenticator
            cdaContext.LegalAuthenticator = CreateLegalAuthenticator(hl7GenericMessage);

            // Custodian
            cdaContext.Custodian = BaseCDAModel.CreateCustodian();
            ICustodian custodian = BaseCDAModel.CreateParticipantCustodian();
            cdaContext.Custodian.Participant = custodian;

            diagnosticImagingReport.CDAContext = cdaContext;

            #endregion

            #region Setup and Populate the SCS Context model

            // SCS Context model
            diagnosticImagingReport.SCSContext = DiagnosticImagingReport.CreateSCSContext();

            // Author Health Care Provider
            diagnosticImagingReport.SCSContext.Author = CreateAuthor(hl7GenericMessage);

            // The Reporting Radiologist
            diagnosticImagingReport.SCSContext.ReportingRadiologist = CreateReportingRadiologist(hl7GenericMessage);

            // Order Details
            diagnosticImagingReport.SCSContext.OrderDetails = CreateOrderDetails(hl7GenericMessage);

            // Subject Of Care
            diagnosticImagingReport.SCSContext.SubjectOfCare = CreateSubjectOfCare(hl7GenericMessage);

            #endregion

            #region Setup and populate the SCS Content model

            // SCS Content model
            diagnosticImagingReport.SCSContent = DiagnosticImagingReport.CreateSCSContent();

            ReportAttachment reportAttachment = GetReportAttachment(hl7GenericMessage, reportData);

            // Imaging Examination Results
            diagnosticImagingReport.SCSContent.ImagingExaminationResults = CreateImagingExaminationResults(hl7GenericMessage);

            // Related Document
            diagnosticImagingReport.SCSContent.RelatedDocument = CreateRelatedDocument(hl7GenericMessage, reportAttachment);

            #endregion

            FillInAdditionalMetadata(diagnosticImagingReport, metadata);

            return(new DiagnosticImagingTransformResult
            {
                DiagnosticImagingReport = diagnosticImagingReport,
                Attachment = reportAttachment
            });
        }
コード例 #13
0
        /// <summary>
        /// Create the related document from information in the HL7 V2 message.
        /// </summary>
        /// <param name="message">The HL7 V2 message.</param>
        /// <param name="reportAttachment">Report attachment.</param>
        /// <returns>RelatedDocument</returns>
        internal static RelatedDocument CreateRelatedDocument(HL7GenericMessage message, ReportAttachment reportAttachment)
        {
            RelatedDocument relatedDocument = PathologyResultReport.CreateRelatedDocument();

            // Pathology PDF
            var attachmentPdf = BaseCDAModel.CreateExternalData();

            attachmentPdf.ExternalDataMediaType = reportAttachment.MediaType;
            attachmentPdf.ByteArrayInput        = new ByteArrayInput
            {
                ByteArray = reportAttachment.Data,
                FileName  = reportAttachment.Filename
            };
            relatedDocument.ExaminationResultRepresentation = attachmentPdf;

            DocumentDetails documentDetails = BaseCDAModel.CreateDocumentDetails();

            // Report Date
            documentDetails.ReportDate = GetReportDate(message);

            // Result Status
            string            status = GetRelatedDocumentStatus(message);
            Hl7V3ResultStatus resultStatus;

            if (!EnumHelper.TryGetEnumValue <Hl7V3ResultStatus, NameAttribute>(attribute => attribute.Code == status, out resultStatus))
            {
                throw new ArgumentException("No matching Hl7V3ResultStatus value found");
            }
            documentDetails.ReportStatus = BaseCDAModel.CreateResultStatus(resultStatus);

            // Report Name
            documentDetails.ReportDescription = GetReportName(message);

            relatedDocument.DocumentDetails = documentDetails;

            return(relatedDocument);
        }