public Guid AddAttachmentToSummary(Attachment attachment, Guid summaryId)
        {
            // Load the Summary.
            var summary = _sumUoW.Find <Summary>(summaryId);

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

            // Construct the Entity.
            var entity = new SummaryAttachment(IdentityId, summary.AgencyId, attachment.Id);

            // Map into the summary-specific type.
            attachment.MapInto(entity);

            // Add the attachment.
            summary.Attachments.Add(entity);

            _sumUoW.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.
            _sumUoW.PendingMessages.Add(DataEntryMessages.EntityCreated(entity, summary.ModuleType, DataEntryAggregateType.Summary));
            _sumUoW.PublishPendingMessages();

            return(entity.Id);
        }
        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>());
        }
        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);
        }
        /// <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();
        }