public async Task <List <int> > HandleAsync(Request message)
        {
            Domain.Scheme.Scheme scheme = await dataAccess.FetchSchemeByOrganisationIdAsync(message.PcsId);

            authorization.EnsureSchemeAccess(scheme.Id);
            return(await dataAccess.GetDataReturnComplianceYearsForScheme(scheme.Id));
        }
Beispiel #2
0
        public async Task <Guid> HandleAsync(SubmitDataReturnUpload message)
        {
            DataReturnUpload dataReturnsUpload = await fetchDataReturnForSubmissionDataAccess.FetchDataReturnUploadAsync(message.DataReturnUploadId);

            authorization.EnsureSchemeAccess(dataReturnsUpload.Scheme.Id);

            var dataReturnVersion = dataReturnsUpload.DataReturnVersion;
            await submitReturnVersionDataAccess.Submit(dataReturnVersion);

            return(dataReturnVersion.Id);
        }
Beispiel #3
0
        public async Task <DataReturnUploadInfo> HandleAsync(GetUploadInfoByDataReturnUploadId message)
        {
            DataReturnUpload dataReturnUpload = await dataAccess.FetchDataReturnUploadByIdAsync(message.DataReturnUploadId);

            authorization.EnsureSchemeAccess(dataReturnUpload.Scheme.Id);

            var quarter = new DataReturnUploadInfo
            {
                Quarter = (QuarterType?)dataReturnUpload.Quarter,
                Year    = dataReturnUpload.ComplianceYear
            };

            return(quarter);
        }
Beispiel #4
0
        public async Task <DataReturnForSubmission> HandleAsync(Request message)
        {
            DataReturnUpload dataReturnUpload = await dataAccess.FetchDataReturnUploadAsync(message.DataReturnUploadId);

            authorization.EnsureSchemeAccess(dataReturnUpload.Scheme.Id);

            if (dataReturnUpload.DataReturnVersion != null && dataReturnUpload.DataReturnVersion.IsSubmitted)
            {
                string errorMessage = string.Format(
                    "The data return with ID \"{0}\" has already been submitted.",
                    dataReturnUpload.Id);
                throw new InvalidOperationException(errorMessage);
            }

            List <DataReturnWarning> warnings = dataReturnUpload.Errors
                                                .Where(e => e.ErrorLevel == ErrorLevel.Warning)
                                                .Select(e => new DataReturnWarning(e.Description))
                                                .ToList();

            List <DataReturnError> errors = dataReturnUpload.Errors
                                            .Where(e => e.ErrorLevel == ErrorLevel.Error)
                                            .OrderBy(e => e.LineNumber)
                                            .Select(e => new DataReturnError(e.Description))
                                            .ToList();

            bool isResubmission;

            if (errors.Count == 0)
            {
                isResubmission = await dataAccess.CheckForExistingSubmissionAsync(
                    dataReturnUpload.Scheme.Id,
                    dataReturnUpload.ComplianceYear.Value,
                    dataReturnUpload.Quarter.Value);
            }
            else
            {
                isResubmission = false;
            }

            return(new DataReturnForSubmission(
                       dataReturnUpload.Id,
                       dataReturnUpload.Scheme.OrganisationId,
                       dataReturnUpload.ComplianceYear,
                       (QuarterType?)dataReturnUpload.Quarter,
                       warnings,
                       errors,
                       isResubmission));
        }
Beispiel #5
0
        public async Task <Guid> HandleAsync(ProcessDataReturnXmlFile message)
        {
            Scheme scheme = await dataAccess.FetchSchemeByOrganisationIdAsync(message.OrganisationId);

            authorization.EnsureSchemeAccess(scheme.Id);

            // record XML processing start time
            Stopwatch stopwatch = Stopwatch.StartNew();

            var xmlGeneratorResult = xmlGenerator.GenerateDataReturns <SchemeReturn>(message);
            DataReturnUpload dataReturnUpload;

            if (xmlGeneratorResult.SchemaErrors.Any())
            {
                dataReturnUpload = new DataReturnUpload(scheme, xmlGeneratorResult.XmlString,
                                                        xmlGeneratorResult.SchemaErrors.Select(e => e.ToDataReturnsUploadError()).ToList(),
                                                        message.FileName, null, null);
            }
            else
            {
                int         complianceYear = int.Parse(xmlGeneratorResult.DeserialisedType.ComplianceYear);
                QuarterType quarter        = xmlGeneratorResult.DeserialisedType.ReturnPeriod.ToDomainQuarterType();

                var pcsReturnVersionBuilder         = dataReturnVersionBuilderDelegate(scheme, new Quarter(complianceYear, quarter));
                var dataReturnVersionFromXmlBuilder = dataReturnVersionFromXmlBuilderDelegate(pcsReturnVersionBuilder);

                var dataReturnVersionBuilderResult = await dataReturnVersionFromXmlBuilder.Build(xmlGeneratorResult.DeserialisedType);

                var allErrors = (dataReturnVersionBuilderResult.ErrorData
                                 .Select(e => new DataReturnUploadError(e.ErrorLevel.ToDomainErrorLevel(), Domain.Error.UploadErrorType.Business, e.Description)))
                                .ToList();

                dataReturnUpload = new DataReturnUpload(scheme, xmlGeneratorResult.XmlString, allErrors, message.FileName, complianceYear, Convert.ToInt32(quarter));

                if (!dataReturnVersionBuilderResult.ErrorData.Any(e => e.ErrorLevel == ErrorLevel.Error))
                {
                    dataReturnUpload.SetDataReturnVersion(dataReturnVersionBuilderResult.DataReturnVersion);
                }
            }

            // Record XML processing end time
            stopwatch.Stop();
            dataReturnUpload.SetProcessTime(stopwatch.Elapsed);

            await dataAccess.AddAndSaveAsync(dataReturnUpload);

            return(dataReturnUpload.Id);
        }
Beispiel #6
0
        public async Task HandleAsync_NoAccessToScheme_ThrowsSecurityException()
        {
            Guid pcsId = new Guid("A7905BCD-8EE7-48E5-9E71-2B571F7BBC81");

            Requests.DataReturns.FetchDataReturnComplianceYearsForScheme request = new Requests.DataReturns.FetchDataReturnComplianceYearsForScheme(pcsId);
            A.CallTo(() => dataAccess.FetchSchemeByOrganisationIdAsync(pcsId)).Returns(A.Dummy <Domain.Scheme.Scheme>());

            A.CallTo(() => authorization.EnsureSchemeAccess(A <Guid> ._))
            .Throws <SecurityException>();

            await
            Assert.ThrowsAsync <SecurityException>(
                () => Handler().HandleAsync(request));

            A.CallTo(() => dataAccess.GetDataReturnComplianceYearsForScheme(pcsId))
            .MustNotHaveHappened();
        }
 public AuthorizationBuilder AllowSchemeAccess()
 {
     A.CallTo(() => fake.EnsureSchemeAccess(A.Dummy <Guid>())).WithAnyArguments().DoesNothing();
     A.CallTo(() => fake.CheckSchemeAccess(A.Dummy <Guid>())).WithAnyArguments().Returns(true);
     return(this);
 }