Exemplo n.º 1
0
        public async Task <DataReturnVersionBuilderResult> Build()
        {
            DataReturnVersion dataReturnVersion = null;
            List <ErrorData>  uniqueErrors      = Errors.Distinct().ToList();

            if (ConsideredValid(Errors))
            {
                var dataReturn = await schemeQuarterDataAccess.FetchDataReturnOrDefault();

                if (dataReturn == null)
                {
                    dataReturn = new DataReturn(Scheme, Quarter);
                }

                DataReturnVersion latestSubmittedDataReturnVersion = dataReturn.CurrentVersion;

                var weeeCollectedReturnVersion = BuildWeeeCollectedReturnVersion(latestSubmittedDataReturnVersion);
                var weeeDeliveredReturnVersion = BuildWeeeDeliveredReturnVersion(latestSubmittedDataReturnVersion);
                var eeeOutputReturnVersion     = BuildEeeOutputReturnVersion(latestSubmittedDataReturnVersion);

                dataReturnVersion = new DataReturnVersion(dataReturn, weeeCollectedReturnVersion, weeeDeliveredReturnVersion, eeeOutputReturnVersion);
            }

            return(new DataReturnVersionBuilderResult(dataReturnVersion, uniqueErrors));
        }
        public void AddDataReturnVersion_WithDataReturnVersionForAnotherScheme_ThrowsInvalidOperationException()
        {
            // Arrange
            var scheme1 = A.Fake <Scheme>();

            A.CallTo(() => scheme1.ApprovalNumber)
            .Returns("WEE/SC1000SCH");

            var scheme2 = A.Fake <Scheme>();

            A.CallTo(() => scheme2.ApprovalNumber)
            .Returns("WEE/SC2000SCH");

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            var registeredProducer = new RegisteredProducer("PRN", 2016, scheme2);

            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.AutomaticDispensers, 100, registeredProducer));

            var dataReturn        = new DataReturn(scheme1, new Quarter(2016, QuarterType.Q2));
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act, Assert
            Assert.Throws <InvalidOperationException>(() => eeeOutputReturnVersion.AddDataReturnVersion(dataReturnVersion));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingWeeeCollectedAmounts_ReturnsDataReturnVersionWithExistingWeeeCollectedReturnVersion()
        {
            var weeeCollectedReturnVersion = new WeeeCollectedReturnVersion();

            weeeCollectedReturnVersion.AddWeeeCollectedAmount(
                new WeeeCollectedAmount(WeeeCollectedAmountSourceType.Dcf, ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100));

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, weeeCollectedReturnVersion,
                                                          A.Dummy <WeeeDeliveredReturnVersion>(), A.Dummy <EeeOutputReturnVersion>());

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            var builder = helper.Create();
            await builder.AddWeeeCollectedAmount(WeeeCollectedAmountSourceType.Dcf, WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(weeeCollectedReturnVersion, result.DataReturnVersion.WeeeCollectedReturnVersion);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputReturnVersion()
        {
            var registeredProducer = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer));

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          A.Dummy <WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer(A <string> ._))
            .Returns(registeredProducer);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("PRN", "ProducerName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingWeeeDeliveredAmounts_ReturnsDataReturnVersionWithExistingWeeeDeliveredReturnVersion()
        {
            var aatfDeliveryLocation = new AatfDeliveryLocation("ApprovalNumber", "FacilityName");

            var weeeDeliveredReturnVersion = new WeeeDeliveredReturnVersion();

            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(
                new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, aatfDeliveryLocation));

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          weeeDeliveredReturnVersion, A.Dummy <EeeOutputReturnVersion>());

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetOrAddAatfDeliveryLocation(A <string> ._, A <string> ._))
            .Returns(aatfDeliveryLocation);

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(weeeDeliveredReturnVersion, result.DataReturnVersion.WeeeDeliveredReturnVersion);
        }
Exemplo n.º 6
0
        public async Task HandleAsync_SendsEmailWithDataReturnYear()
        {
            // Arrange
            string emailAddress       = "*****@*****.**";
            var    competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Name", "Abbreviation", A.Dummy <Country>(), emailAddress, 0);

            Scheme scheme = A.Fake <Scheme>();

            A.CallTo(() => scheme.CompetentAuthority)
            .Returns(competentAuthority);

            Quarter quarter = new Quarter(2015, QuarterType.Q1);

            DataReturn        dataReturn        = new DataReturn(scheme, quarter);
            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);

            dataReturnVersion.Submit("testUserId");

            var schemeSubmissionEvent = new SchemeDataReturnSubmissionEvent(dataReturnVersion);

            var emailService = A.Fake <IWeeeEmailService>();
            var dataAccess   = A.Dummy <ISchemeDataReturnSubmissionEventHandlerDataAccess>();
            var handler      = new SchemeDataReturnSubmissionEventHandler(emailService, dataAccess);

            // Act
            await handler.HandleAsync(schemeSubmissionEvent);

            // Assert
            A.CallTo(() => emailService.SendSchemeDataReturnSubmitted(A <string> ._, A <string> ._, 2015, A <int> ._, A <bool> ._))
            .MustHaveHappened(Repeated.Exactly.Once);
        }
Exemplo n.º 7
0
        public async Task HandleAsync_InvokesDataAccess_GetNumberOfDataReturnSubmissionsAsync_WithCorrectParameters()
        {
            // Arrange
            string emailAddress       = "*****@*****.**";
            var    competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Name", "Abbreviation", A.Dummy <Country>(), emailAddress, 0);

            Scheme scheme = A.Fake <Scheme>();

            A.CallTo(() => scheme.CompetentAuthority)
            .Returns(competentAuthority);

            Quarter quarter = new Quarter(2016, QuarterType.Q2);

            DataReturn        dataReturn        = new DataReturn(scheme, quarter);
            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);

            dataReturnVersion.Submit("testUserId");

            var dataAccess   = A.Fake <ISchemeDataReturnSubmissionEventHandlerDataAccess>();
            var emailService = A.Fake <IWeeeEmailService>();
            var handler      = new SchemeDataReturnSubmissionEventHandler(emailService, dataAccess);

            var schemeSubmissionEvent = new SchemeDataReturnSubmissionEvent(dataReturnVersion);

            // Act
            await handler.HandleAsync(schemeSubmissionEvent);

            // Assert
            A.CallTo(() => dataAccess.GetNumberOfDataReturnSubmissionsAsync(scheme, 2016, QuarterType.Q2))
            .MustHaveHappened();
        }
Exemplo n.º 8
0
        public void CreateResults_ForDataReturnVersionWithNullWeeeCollectedDataReturnVersion_DoesNotIncludeWeeeCollectedDataReturnVersionItemsInResults()
        {
            // Arrange
            IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights();

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                authorization,
                A.Dummy <IGetUkWeeeCsvDataAccess>(),
                A.Dummy <CsvWriterFactory>());

            var dataReturn        = new DataReturn(A.Fake <Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q1));
            var dataReturnVersion = new DataReturnVersion(dataReturn, null, A.Dummy <WeeeDeliveredReturnVersion>(), A.Dummy <EeeOutputReturnVersion>());

            dataReturn.SetCurrentVersion(dataReturnVersion);

            // Act
            var result = handler.CreateResults(new List <DataReturn> {
                dataReturn
            });

            // Assert
            Assert.All(result, r => Assert.Null(r.DcfQ1));
            Assert.All(result, r => Assert.Null(r.DistributorQ1));
            Assert.All(result, r => Assert.Null(r.FinalHolderQ1));
        }
        public async Task FetchResultsAsync_WithUnsubmittedReturnData_ReturnsEmptyList()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme       scheme       = new Scheme(organisation);

                Quarter    quarter    = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeCollectedAmount amount1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Empty(results);
            }
        }
        public async Task HandleAsync_SendsEmailWithSchemeName()
        {
            // Arrange
            string emailAddress = "*****@*****.**";
            var competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Name", "Abbreviation", A.Dummy<Country>(), emailAddress);

            Scheme scheme = A.Fake<Scheme>();
            A.CallTo(() => scheme.CompetentAuthority)
                .Returns(competentAuthority);
            A.CallTo(() => scheme.SchemeName)
                .Returns("Test Scheme Name");

            Quarter quarter = new Quarter(2016, QuarterType.Q1);

            DataReturn dataReturn = new DataReturn(scheme, quarter);
            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);
            dataReturnVersion.Submit("testUserId");

            var schemeSubmissionEvent = new SchemeDataReturnSubmissionEvent(dataReturnVersion);

            var emailService = A.Fake<IWeeeEmailService>();
            var dataAccess = A.Dummy<ISchemeDataReturnSubmissionEventHandlerDataAccess>();
            var handler = new SchemeDataReturnSubmissionEventHandler(emailService, dataAccess);

            // Act
            await handler.HandleAsync(schemeSubmissionEvent);

            // Assert
            A.CallTo(() => emailService.SendSchemeDataReturnSubmitted(A<string>._, "Test Scheme Name", A<int>._, A<int>._, A<bool>._))
                .MustHaveHappened(Repeated.Exactly.Once);
        }
        public async Task FetchResultsAsync_WithUnsubmittedReturnData_ReturnsEmptyList()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                Quarter quarter = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeCollectedAmount amount1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Empty(results);
            }
        }
        public async Task FetchResultsAsync_WithReturnDataForTowQuarters_ReturnsOneResultForEachQuarter()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme       scheme       = new Scheme(organisation);

                Quarter    quarter1     = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturnQ1 = new DataReturn(scheme, quarter1);

                DataReturnVersion versionQ1 = new DataReturnVersion(dataReturnQ1);

                WeeeCollectedAmount amountQ1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                versionQ1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountQ1);

                wrapper.WeeeContext.DataReturns.Add(dataReturnQ1);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturnQ1.SetCurrentVersion(versionQ1);
                await wrapper.WeeeContext.SaveChangesAsync();

                Quarter    quarter2     = new Quarter(2099, QuarterType.Q2);
                DataReturn dataReturnQ2 = new DataReturn(scheme, quarter2);

                DataReturnVersion versionQ2 = new DataReturnVersion(dataReturnQ2);

                WeeeCollectedAmount amountQ2 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                versionQ2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountQ2);

                wrapper.WeeeContext.DataReturns.Add(dataReturnQ2);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturnQ2.SetCurrentVersion(versionQ2);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(2, results.Count);

                Assert.Collection(results,
                                  r => Assert.Equal(1, r.Quarter),
                                  r => Assert.Equal(2, r.Quarter));
            }
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithSomeExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputAmounts()
        {
            var registeredProducer1 = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer1.ProducerRegistrationNumber)
            .Returns("Producer1");
            A.CallTo(() => registeredProducer1.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var registeredProducer2 = A.Fake <RegisteredProducer>();

            A.CallTo(() => registeredProducer2.ProducerRegistrationNumber)
            .Returns("Producer2");
            A.CallTo(() => registeredProducer2.Equals(A <RegisteredProducer> ._))
            .Returns(true);

            var eeeOutputAmount1 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer1);
            var eeeOutputAmount2 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.MedicalDevices, 200, registeredProducer1);
            var eeeOutputAmount3 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ToysLeisureAndSports, 100, registeredProducer2);
            var eeeOutputAmount4 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 150, registeredProducer2);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();

            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount1);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount2);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount3);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount4);

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          A.Dummy <WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer1"))
            .Returns(registeredProducer1);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer2"))
            .Returns(registeredProducer2);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("Producer1", "ProducerName", WeeeCategory.MedicalDevices, ObligationType.B2C, 200);

            await builder.AddEeeOutputAmount("Producer2", "ProducerName", WeeeCategory.ToysLeisureAndSports, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotSame(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
            Assert.Collection(result.DataReturnVersion.EeeOutputReturnVersion.EeeOutputAmounts,
                              r1 => Assert.Same(eeeOutputAmount2, r1),
                              r2 => Assert.Same(eeeOutputAmount3, r2));
        }
        public void AddDataReturnVersion_AddsToDataReturnVersions()
        {
            var dataReturnVersion = new DataReturnVersion(A.Fake<DataReturn>());

            var associativeEntity = new DataReturnVersionAssociativeEntity();
            associativeEntity.AddDataReturnVersion(dataReturnVersion);

            Assert.Contains(dataReturnVersion, associativeEntity.DataReturnVersions);
        }
        public void AddDataReturnVersion_ForDifferentDataReturn_ThrowsInvalidOperationException()
        {
            var dataReturnVersion1 = new DataReturnVersion(A.Fake<DataReturn>());
            var dataReturnVersion2 = new DataReturnVersion(A.Fake<DataReturn>());

            var associativeEntity = new DataReturnVersionAssociativeEntity();
            associativeEntity.AddDataReturnVersion(dataReturnVersion1);

            Assert.Throws<InvalidOperationException>(() => associativeEntity.AddDataReturnVersion(dataReturnVersion2));
        }
        public void AddDataReturnVersion_AddsToDataReturnVersions()
        {
            var dataReturnVersion = new DataReturnVersion(A.Fake <DataReturn>());

            var associativeEntity = new DataReturnVersionAssociativeEntity();

            associativeEntity.AddDataReturnVersion(dataReturnVersion);

            Assert.Contains(dataReturnVersion, associativeEntity.DataReturnVersions);
        }
        public void AddDataReturnVersion_ForDifferentDataReturn_ThrowsInvalidOperationException()
        {
            var dataReturnVersion1 = new DataReturnVersion(A.Fake <DataReturn>());
            var dataReturnVersion2 = new DataReturnVersion(A.Fake <DataReturn>());

            var associativeEntity = new DataReturnVersionAssociativeEntity();

            associativeEntity.AddDataReturnVersion(dataReturnVersion1);

            Assert.Throws <InvalidOperationException>(() => associativeEntity.AddDataReturnVersion(dataReturnVersion2));
        }
        public async Task FetchResultsAsync_WithLargeHouseHoldAppliancesAmount_ReturnsNullForAllOtherCategories()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme       scheme       = new Scheme(organisation);

                Quarter    quarter    = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeCollectedAmount amount1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.NotNull(result.Category1);
                Assert.Null(result.Category2);
                Assert.Null(result.Category3);
                Assert.Null(result.Category4);
                Assert.Null(result.Category5);
                Assert.Null(result.Category6);
                Assert.Null(result.Category7);
                Assert.Null(result.Category8);
                Assert.Null(result.Category9);
                Assert.Null(result.Category10);
                Assert.Null(result.Category11);
                Assert.Null(result.Category12);
                Assert.Null(result.Category13);
                Assert.Null(result.Category14);
            }
        }
Exemplo n.º 19
0
        public void SetCurrentVersion(DataReturnVersion version)
        {
            Guard.ArgumentNotNull(() => version, version);

            if (version.DataReturn != this)
            {
                string errorMessage = "The specified data return version does not relate to this data return.";
                throw new InvalidOperationException(errorMessage);
            }

            CurrentVersion = version;
        }
        internal virtual void AddDataReturnVersion(DataReturnVersion dataReturnVersion)
        {
            Guard.ArgumentNotNull(() => dataReturnVersion, dataReturnVersion);

            var existingDataReturnVersion = DataReturnVersions.FirstOrDefault();
            if (existingDataReturnVersion != null &&
                dataReturnVersion.DataReturn != existingDataReturnVersion.DataReturn)
            {
                throw new InvalidOperationException("The data return version does not belong to the current data return");
            }

            DataReturnVersions.Add(dataReturnVersion);
        }
        public async Task FetchResultsAsync_WithSeveralOutputAmounts_ReturnsSumOfAmounts()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme       scheme       = new Scheme(organisation);

                RegisteredProducer registeredProducer1 = new RegisteredProducer("WEE/AA1111AA", 2099, scheme);
                RegisteredProducer registeredProducer2 = new RegisteredProducer("WEE/BB2222BB", 2099, scheme);

                Quarter    quarter    = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                EeeOutputAmount amount1 = new EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    100,
                    registeredProducer1);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amount1);

                EeeOutputAmount amount2 = new EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    200,
                    registeredProducer2);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amount2);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.Equal(300, result.Category1);
            }
        }
Exemplo n.º 22
0
        public void Submit_WhenNotYetSubmitted_MarksDataReturnVersionAsSubmitted()
        {
            // Arrange
            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.True(dataReturnVersion.IsSubmitted);
            Assert.Equal(dataReturnVersion.SubmittingUserId, "*****@*****.**");
            Assert.Equal(dataReturnVersion.DataReturn.Id, dataReturn.Id);
        }
Exemplo n.º 23
0
        public void Submit_AddSubmissionEventToEventsList()
        {
            // Arrange
            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.Equal(1, dataReturnVersion.Events.Count());
            Assert.IsType <SchemeDataReturnSubmissionEvent>(dataReturnVersion.Events.Single());
            Assert.Same(dataReturnVersion, ((SchemeDataReturnSubmissionEvent)dataReturnVersion.Events.Single()).DataReturnVersion);
        }
Exemplo n.º 24
0
        public void SetCurrentDataReturnVersion_ThrowInvalidOperationException()
        {
            // Arrange
            Scheme            scheme     = new Scheme(Guid.NewGuid());
            Quarter           quarter    = new Quarter(2016, QuarterType.Q1);
            DataReturn        dataReturn = new DataReturn(scheme, quarter);
            DataReturnVersion version    = new DataReturnVersion(new DataReturn(scheme, quarter));

            // Act
            Action action = () => dataReturn.SetCurrentVersion(version);

            // Assert
            Assert.Throws <InvalidOperationException>(action);
        }
Exemplo n.º 25
0
        public void SetCurrentDataReturnVersion_ThrowInvalidOperationException()
        {
            // Arrange
            Scheme scheme = new Scheme(Guid.NewGuid());
            Quarter quarter = new Quarter(2016, QuarterType.Q1);
            DataReturn dataReturn = new DataReturn(scheme, quarter);
            DataReturnVersion version = new DataReturnVersion(new DataReturn(scheme, quarter));

            // Act
            Action action = () => dataReturn.SetCurrentVersion(version);

            // Assert
            Assert.Throws<InvalidOperationException>(action);
        }
        public void Submit_WhenNotYetSubmitted_MarksDataReturnVersionAsSubmitted()
        {
            // Arrange
            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.True(dataReturnVersion.IsSubmitted);
            Assert.Equal(dataReturnVersion.SubmittingUserId, "*****@*****.**");
            Assert.Equal(dataReturnVersion.DataReturn.Id, dataReturn.Id);
        }
        public void Submit_AddSubmissionEventToEventsList()
        {
            // Arrange
            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.Equal(1, dataReturnVersion.Events.Count());
            Assert.IsType<SchemeDataReturnSubmissionEvent>(dataReturnVersion.Events.Single());
            Assert.Same(dataReturnVersion, ((SchemeDataReturnSubmissionEvent)dataReturnVersion.Events.Single()).DataReturnVersion);
        }
Exemplo n.º 28
0
        public void CreateResults_WithSeveralDcfCollectedAmountsInDifferentQuarters_PopulatesDcfTotalWithSum()
        {
            // Arrange
            DataReturn dataReturn1 = new DataReturn(A.Dummy <Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q2));

            DataReturnVersion dataReturnVersion1 = new DataReturnVersion(dataReturn1);

            WeeeCollectedAmount weeeCollectedAmount1 = new WeeeCollectedAmount(
                WeeeCollectedAmountSourceType.Dcf,
                DomainObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                100);

            dataReturnVersion1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount1);

            dataReturn1.SetCurrentVersion(dataReturnVersion1);

            DataReturn dataReturn2 = new DataReturn(A.Dummy <Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q4));

            DataReturnVersion dataReturnVersion2 = new DataReturnVersion(dataReturn2);

            WeeeCollectedAmount weeeCollectedAmount2 = new WeeeCollectedAmount(
                WeeeCollectedAmountSourceType.Dcf,
                DomainObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                200);

            dataReturnVersion2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount2);

            dataReturn2.SetCurrentVersion(dataReturnVersion2);

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <IGetUkWeeeCsvDataAccess>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetUkWeeeCsvHandler.CsvResult> results = handler.CreateResults(new List <DataReturn>()
            {
                dataReturn1, dataReturn2
            });

            // Assert
            GetUkWeeeCsvHandler.CsvResult result = results
                                                   .Single(r => r.Category == WeeeCategory.LargeHouseholdAppliances && r.ObligationType == DomainObligationType.B2C);
            Assert.NotNull(result);

            Assert.Equal(300, result.DcfTotal);
        }
Exemplo n.º 29
0
        public void Submit_WhenAlreadySubmitted_ThrowInvalidOperationException()
        {
            // Arrange
            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Act
            Action action = () => dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.Throws <InvalidOperationException>(action);
        }
        public void Submit_WhenAlreadySubmitted_ThrowInvalidOperationException()
        {
            // Arrange
            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn);

            // Act
            dataReturnVersion.Submit("*****@*****.**");

            // Act
            Action action = () => dataReturnVersion.Submit("*****@*****.**");

            // Assert
            Assert.Throws<InvalidOperationException>(action);
        }
Exemplo n.º 31
0
        public XDocument GenerateXml(DataReturnVersion dataReturnVersion)
        {
            Guard.ArgumentNotNull(() => dataReturnVersion, dataReturnVersion);

            XDocument xmlDoc = new XDocument();

            xmlDoc.Declaration = new XDeclaration("1.0", "utf-8", "yes");

            XElement xmlSchemeReturn = new XElement(XmlNamespace.DataReturns + "SchemeReturn");
            xmlDoc.Add(xmlSchemeReturn);

            PopulateSchemeReturn(dataReturnVersion, xmlSchemeReturn);

            return xmlDoc;
        }
Exemplo n.º 32
0
        public XDocument GenerateXml(DataReturnVersion dataReturnVersion)
        {
            Guard.ArgumentNotNull(() => dataReturnVersion, dataReturnVersion);

            XDocument xmlDoc = new XDocument();

            xmlDoc.Declaration = new XDeclaration("1.0", "utf-8", "yes");

            XElement xmlSchemeReturn = new XElement(XmlNamespace.DataReturns + "SchemeReturn");

            xmlDoc.Add(xmlSchemeReturn);

            PopulateSchemeReturn(dataReturnVersion, xmlSchemeReturn);

            return(xmlDoc);
        }
        public async Task FetchResultsAsync_WithQ1ReturnDataWithDeliveredToAeB2CAmount_ReturnsOneResultForQ1Type1Source1B2C()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme       scheme       = new Scheme(organisation);

                Quarter    quarter    = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeDeliveredAmount amount1 = new WeeeDeliveredAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AeDeliveryLocation("WEE/AA1111AA/AE", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List <DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.Equal(1, result.Quarter);
                Assert.Equal(1, result.Type);
                Assert.Equal(1, result.Source);
                Assert.Equal("B2C", result.ObligationType);
            }
        }
Exemplo n.º 34
0
        public async Task <FileInfo> HandleAsync(Requests.DataReturns.CreateTestXmlFile message)
        {
            DataReturnVersion dataReturnVersion = await dataReturnVersionGenerator.GenerateAsync(message.Settings);

            XDocument xml = xmlGenerator.GenerateXml(dataReturnVersion);

            byte[] data;
            using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
            {
                xml.Save(stream);
                data = stream.ToArray();
            }

            string fileName = string.Format(
                "PCS Data Return XML - {0:yyyy MM dd HH mm ss}.xml",
                SystemTime.UtcNow);

            return(new FileInfo(fileName, data));
        }
        public async Task Build_ExistingLatestDataReturnVersion_WithSomeExistingWeeeDeliveredAmounts_ReturnsDataReturnVersionWithExistingWeeeDeliveredAmounts()
        {
            var weeeDeliveredAmount1 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount2 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ITAndTelecommsEquipment, 200, new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount3 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.DisplayEquipment, 100, new AeDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount4 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.LargeHouseholdAppliances, 300, new AeDeliveryLocation("ApprovalNumber", "OperatorName"));

            var weeeDeliveredReturnVersion = new WeeeDeliveredReturnVersion();

            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount1);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount2);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount3);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount4);

            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          weeeDeliveredReturnVersion, A.Dummy <EeeOutputReturnVersion>());

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetOrAddAatfDeliveryLocation(A <string> ._, A <string> ._))
            .Returns(new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            A.CallTo(() => helper.DataAccess.GetOrAddAeDeliveryLocation(A <string> ._, A <string> ._))
            .Returns(new AeDeliveryLocation("ApprovalNumber", "OperatorName"));

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            await builder.AddAeDeliveredAmount("ApprovalNumber", "OperatorName", WeeeCategory.LargeHouseholdAppliances, ObligationType.B2C, 300);

            var result = await builder.Build();

            Assert.NotSame(weeeDeliveredReturnVersion, result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Collection(result.DataReturnVersion.WeeeDeliveredReturnVersion.WeeeDeliveredAmounts,
                              r1 => Assert.Same(weeeDeliveredAmount1, r1),
                              r2 => Assert.Same(weeeDeliveredAmount4, r2));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_DoesNotContainReturnData_WithNoDataForNewReturn_ReturnsNullReturnVersions()
        {
            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, null, null, null);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            var builder = helper.Create();

            var result = await builder.Build();

            Assert.Null(result.DataReturnVersion.WeeeCollectedReturnVersion);
            Assert.Null(result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Null(result.DataReturnVersion.EeeOutputReturnVersion);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithNoExistingWeeeDeliveredReturnVersion_ReturnsDataReturnVersionWithNewWeeeDeliveredReturnVersion()
        {
            var dataReturn        = new DataReturn(A.Dummy <Scheme>(), A.Dummy <Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy <WeeeCollectedReturnVersion>(),
                                                          null, A.Dummy <EeeOutputReturnVersion>());

            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
            .Returns(dataReturn);

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotNull(result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Equal(1, result.DataReturnVersion.WeeeDeliveredReturnVersion.WeeeDeliveredAmounts.Count);
        }
Exemplo n.º 38
0
        public void CreateResults_WithQ1FinalHolderCollectedAmountOfZero_PopulatesFinalHolderQ1AndFinalHolderTotalWithZero()
        {
            // Arrange
            DataReturn dataReturn = new DataReturn(A.Dummy <Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q1));

            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);

            WeeeCollectedAmount weeeCollectedAmount = new WeeeCollectedAmount(
                WeeeCollectedAmountSourceType.FinalHolder,
                Domain.Obligation.ObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                0);

            dataReturnVersion.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <IGetUkWeeeCsvDataAccess>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetUkWeeeCsvHandler.CsvResult> results = handler.CreateResults(new List <DataReturn>()
            {
                dataReturn
            });

            // Assert
            GetUkWeeeCsvHandler.CsvResult result = results
                                                   .Single(r => r.Category == WeeeCategory.LargeHouseholdAppliances && r.ObligationType == DomainObligationType.B2C);
            Assert.NotNull(result);

            Assert.Equal(0, result.FinalHolderQ1);
            Assert.Equal(null, result.FinalHolderQ2);
            Assert.Equal(null, result.FinalHolderQ3);
            Assert.Equal(null, result.FinalHolderQ4);
            Assert.Equal(0, result.FinalHolderTotal);
        }
Exemplo n.º 39
0
        public void CreateResults_WithQ1DeliveredAmountOfZero_PopulatesDeliveredQ1AndDeliveredTotalWithZero()
        {
            // Arrange
            DataReturn dataReturn = new DataReturn(A.Dummy <Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q1));

            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);

            WeeeDeliveredAmount weeeDeliveredAmount = new WeeeDeliveredAmount(
                DomainObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                0,
                new AatfDeliveryLocation("WEE/AA1234AA/ATF", "Facility Name"));

            dataReturnVersion.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount);

            dataReturn.SetCurrentVersion(dataReturnVersion);

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                A.Dummy <IWeeeAuthorization>(),
                A.Dummy <IGetUkWeeeCsvDataAccess>(),
                A.Dummy <CsvWriterFactory>());

            // Act
            IEnumerable <GetUkWeeeCsvHandler.CsvResult> results = handler.CreateResults(new List <DataReturn>()
            {
                dataReturn
            });

            // Assert
            GetUkWeeeCsvHandler.CsvResult result = results
                                                   .Single(r => r.Category == WeeeCategory.LargeHouseholdAppliances && r.ObligationType == DomainObligationType.B2C);
            Assert.NotNull(result);

            Assert.Equal(0, result.DeliveredQ1);
            Assert.Equal(null, result.DeliveredQ2);
            Assert.Equal(null, result.DeliveredQ3);
            Assert.Equal(null, result.DeliveredQ4);
            Assert.Equal(0, result.DeliveredTotal);
        }
        public bool EeeDataChanged(DataReturnVersion currentSubmission, DataReturnVersion previousSubmission)
        {
            Guard.ArgumentNotNull(() => currentSubmission, currentSubmission);

            bool result = false;

            if (previousSubmission != null)
            {
                if (currentSubmission.EeeOutputReturnVersion != null)
                {
                    result =
                        previousSubmission.EeeOutputReturnVersion == null ||
                        currentSubmission.EeeOutputReturnVersion.Id != previousSubmission.EeeOutputReturnVersion.Id;
                }
                else if (previousSubmission.EeeOutputReturnVersion != null)
                {
                    result = true;
                }
            }

            return result;
        }
Exemplo n.º 41
0
        public bool EeeDataChanged(DataReturnVersion currentSubmission, DataReturnVersion previousSubmission)
        {
            Guard.ArgumentNotNull(() => currentSubmission, currentSubmission);

            bool result = false;

            if (previousSubmission != null)
            {
                if (currentSubmission.EeeOutputReturnVersion != null)
                {
                    result =
                        previousSubmission.EeeOutputReturnVersion == null ||
                        currentSubmission.EeeOutputReturnVersion.Id != previousSubmission.EeeOutputReturnVersion.Id;
                }
                else if (previousSubmission.EeeOutputReturnVersion != null)
                {
                    result = true;
                }
            }

            return(result);
        }
        public async Task <DataReturnVersion> GetPreviousSubmission(DataReturnVersion dataReturnVersion)
        {
            if (!dataReturnVersion.IsSubmitted)
            {
                throw new ArgumentException("The data return version must be submitted.");
            }

            var key = new SchemeYearQuarter
            {
                SchemeId = dataReturnVersion.DataReturn.Scheme.Id,
                Year     = dataReturnVersion.DataReturn.Quarter.Year,
                Quarter  = dataReturnVersion.DataReturn.Quarter.Q
            };

            List <DataReturnVersion> schemeYearQuarterSubmissions;

            if (!dataReturnVersions.TryGetValue(key, out schemeYearQuarterSubmissions))
            {
                schemeYearQuarterSubmissions = await context.DataReturnVersions
                                               .Where(d => d.DataReturn.Scheme.Id == key.SchemeId)
                                               .Where(d => d.DataReturn.Quarter.Year == key.Year)
                                               .Where(d => d.DataReturn.Quarter.Q == key.Quarter)
                                               .Where(d => d.SubmittedDate.HasValue)
                                               .OrderBy(d => d.SubmittedDate)
                                               .ToListAsync();

                dataReturnVersions.Add(key, schemeYearQuarterSubmissions);
            }

            var index = schemeYearQuarterSubmissions.FindIndex(x => x.Id == dataReturnVersion.Id);

            if (index < 0)
            {
                throw new InvalidOperationException("The data return version is not currently stored in the database.");
            }

            return(schemeYearQuarterSubmissions.ElementAtOrDefault(index - 1));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithSomeExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputAmounts()
        {
            var registeredProducer1 = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer1.ProducerRegistrationNumber)
                .Returns("Producer1");
            A.CallTo(() => registeredProducer1.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var registeredProducer2 = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer2.ProducerRegistrationNumber)
                .Returns("Producer2");
            A.CallTo(() => registeredProducer2.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var eeeOutputAmount1 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer1);
            var eeeOutputAmount2 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.MedicalDevices, 200, registeredProducer1);
            var eeeOutputAmount3 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ToysLeisureAndSports, 100, registeredProducer2);
            var eeeOutputAmount4 = new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 150, registeredProducer2);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount1);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount2);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount3);
            eeeOutputReturnVersion.AddEeeOutputAmount(eeeOutputAmount4);

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                A.Dummy<WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer1"))
                .Returns(registeredProducer1);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer("Producer2"))
                .Returns(registeredProducer2);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("Producer1", "ProducerName", WeeeCategory.MedicalDevices, ObligationType.B2C, 200);
            await builder.AddEeeOutputAmount("Producer2", "ProducerName", WeeeCategory.ToysLeisureAndSports, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotSame(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
            Assert.Collection(result.DataReturnVersion.EeeOutputReturnVersion.EeeOutputAmounts,
                r1 => Assert.Same(eeeOutputAmount2, r1),
                r2 => Assert.Same(eeeOutputAmount3, r2));
        }
        public async Task Build_ExistingLatestDataReturnVersion_WithSomeExistingWeeeDeliveredAmounts_ReturnsDataReturnVersionWithExistingWeeeDeliveredAmounts()
        {
            var weeeDeliveredAmount1 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount2 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ITAndTelecommsEquipment, 200, new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount3 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.DisplayEquipment, 100, new AeDeliveryLocation("ApprovalNumber", "FacilityName"));
            var weeeDeliveredAmount4 = new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.LargeHouseholdAppliances, 300, new AeDeliveryLocation("ApprovalNumber", "OperatorName"));

            var weeeDeliveredReturnVersion = new WeeeDeliveredReturnVersion();
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount1);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount2);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount3);
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(weeeDeliveredAmount4);

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                weeeDeliveredReturnVersion, A.Dummy<EeeOutputReturnVersion>());
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetOrAddAatfDeliveryLocation(A<string>._, A<string>._))
                .Returns(new AatfDeliveryLocation("ApprovalNumber", "FacilityName"));
            A.CallTo(() => helper.DataAccess.GetOrAddAeDeliveryLocation(A<string>._, A<string>._))
                .Returns(new AeDeliveryLocation("ApprovalNumber", "OperatorName"));

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);
            await builder.AddAeDeliveredAmount("ApprovalNumber", "OperatorName", WeeeCategory.LargeHouseholdAppliances, ObligationType.B2C, 300);

            var result = await builder.Build();

            Assert.NotSame(weeeDeliveredReturnVersion, result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Collection(result.DataReturnVersion.WeeeDeliveredReturnVersion.WeeeDeliveredAmounts,
                r1 => Assert.Same(weeeDeliveredAmount1, r1),
                r2 => Assert.Same(weeeDeliveredAmount4, r2));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithSomeExistingWeeeCollectedAmounts_ReturnsDataReturnVersionWithExistingWeeeCollectedAmounts()
        {
            var weeeCollectedAmount1 = new WeeeCollectedAmount(WeeeCollectedAmountSourceType.Dcf, ObligationType.B2C, WeeeCategory.DisplayEquipment, 100);
            var weeeCollectedAmount2 = new WeeeCollectedAmount(WeeeCollectedAmountSourceType.Dcf, ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100);
            var weeeCollectedAmount3 = new WeeeCollectedAmount(WeeeCollectedAmountSourceType.Distributor, ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100);
            var weeeCollectedAmount4 = new WeeeCollectedAmount(WeeeCollectedAmountSourceType.FinalHolder, ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100);

            var weeeCollectedReturnVersion = new WeeeCollectedReturnVersion();
            weeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount1);
            weeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount2);
            weeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount3);
            weeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount4);

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, weeeCollectedReturnVersion,
                A.Dummy<WeeeDeliveredReturnVersion>(), A.Dummy<EeeOutputReturnVersion>());
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            var builder = helper.Create();
            await builder.AddWeeeCollectedAmount(WeeeCollectedAmountSourceType.Dcf, WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);
            await builder.AddWeeeCollectedAmount(WeeeCollectedAmountSourceType.Distributor, WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotSame(weeeCollectedReturnVersion, result.DataReturnVersion.WeeeCollectedReturnVersion);
            Assert.Collection(result.DataReturnVersion.WeeeCollectedReturnVersion.WeeeCollectedAmounts,
                r1 => Assert.Same(weeeCollectedAmount2, r1),
                r2 => Assert.Same(weeeCollectedAmount3, r2));
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingEeeOutputAmounts_ReturnsDataReturnVersionWithExistingEeeOutputReturnVersion()
        {
            var registeredProducer = A.Fake<RegisteredProducer>();
            A.CallTo(() => registeredProducer.Equals(A<RegisteredProducer>._))
                .Returns(true);

            var eeeOutputReturnVersion = new EeeOutputReturnVersion();
            eeeOutputReturnVersion.AddEeeOutputAmount(
                new EeeOutputAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, registeredProducer));

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                A.Dummy<WeeeDeliveredReturnVersion>(), eeeOutputReturnVersion);
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetRegisteredProducer(A<string>._))
                .Returns(registeredProducer);

            var builder = helper.Create();
            await builder.AddEeeOutputAmount("PRN", "ProducerName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(eeeOutputReturnVersion, result.DataReturnVersion.EeeOutputReturnVersion);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithAllExistingWeeeDeliveredAmounts_ReturnsDataReturnVersionWithExistingWeeeDeliveredReturnVersion()
        {
            var aatfDeliveryLocation = new AatfDeliveryLocation("ApprovalNumber", "FacilityName");

            var weeeDeliveredReturnVersion = new WeeeDeliveredReturnVersion();
            weeeDeliveredReturnVersion.AddWeeeDeliveredAmount(
                new WeeeDeliveredAmount(ObligationType.B2C, WeeeCategory.ConsumerEquipment, 100, aatfDeliveryLocation));

            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                weeeDeliveredReturnVersion, A.Dummy<EeeOutputReturnVersion>());
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            A.CallTo(() => helper.DataAccess.GetOrAddAatfDeliveryLocation(A<string>._, A<string>._))
                .Returns(aatfDeliveryLocation);

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.Same(weeeDeliveredReturnVersion, result.DataReturnVersion.WeeeDeliveredReturnVersion);
        }
        public async Task FetchResultsAsync_WithReturnDataForTowQuarters_ReturnsOneResultForEachQuarter()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                Quarter quarter1 = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturnQ1 = new DataReturn(scheme, quarter1);

                DataReturnVersion versionQ1 = new DataReturnVersion(dataReturnQ1);

                WeeeCollectedAmount amountQ1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                versionQ1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountQ1);

                wrapper.WeeeContext.DataReturns.Add(dataReturnQ1);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturnQ1.SetCurrentVersion(versionQ1);
                await wrapper.WeeeContext.SaveChangesAsync();

                Quarter quarter2 = new Quarter(2099, QuarterType.Q2);
                DataReturn dataReturnQ2 = new DataReturn(scheme, quarter2);

                DataReturnVersion versionQ2 = new DataReturnVersion(dataReturnQ2);

                WeeeCollectedAmount amountQ2 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                versionQ2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountQ2);

                wrapper.WeeeContext.DataReturns.Add(dataReturnQ2);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturnQ2.SetCurrentVersion(versionQ2);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(2, results.Count);

                Assert.Collection(results,
                    r => Assert.Equal(1, r.Quarter),
                    r => Assert.Equal(2, r.Quarter));
            }
        }
Exemplo n.º 49
0
 public virtual void SetDataReturnVersion(DataReturnVersion returnVersion)
 {
     Guard.ArgumentNotNull(() => returnVersion, returnVersion);
     DataReturnVersion = returnVersion;
 }
 public SchemeDataReturnSubmissionEvent(DataReturnVersion dataReturnVersion)
 {
     DataReturnVersion = dataReturnVersion;
 }
        public async Task HandleAsync_InvokesDataAccess_GetNumberOfDataReturnSubmissionsAsync_WithCorrectParameters()
        {
            // Arrange
            string emailAddress = "*****@*****.**";
            var competentAuthority = new UKCompetentAuthority(Guid.NewGuid(), "Name", "Abbreviation", A.Dummy<Country>(), emailAddress);

            Scheme scheme = A.Fake<Scheme>();
            A.CallTo(() => scheme.CompetentAuthority)
                .Returns(competentAuthority);

            Quarter quarter = new Quarter(2016, QuarterType.Q2);

            DataReturn dataReturn = new DataReturn(scheme, quarter);
            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);
            dataReturnVersion.Submit("testUserId");

            var dataAccess = A.Fake<ISchemeDataReturnSubmissionEventHandlerDataAccess>();
            var emailService = A.Fake<IWeeeEmailService>();
            var handler = new SchemeDataReturnSubmissionEventHandler(emailService, dataAccess);

            var schemeSubmissionEvent = new SchemeDataReturnSubmissionEvent(dataReturnVersion);

            // Act
            await handler.HandleAsync(schemeSubmissionEvent);

            // Assert
            A.CallTo(() => dataAccess.GetNumberOfDataReturnSubmissionsAsync(scheme, 2016, QuarterType.Q2))
                .MustHaveHappened();
        }
        public async Task FetchResultsAsync_WithQ1ReturnDataWithDeliveredToAeB2CAmount_ReturnsOneResultForQ1Type1Source1B2C()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                Quarter quarter = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeDeliveredAmount amount1 = new WeeeDeliveredAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AeDeliveryLocation("WEE/AA1111AA/AE", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.Equal(1, result.Quarter);
                Assert.Equal(1, result.Type);
                Assert.Equal(1, result.Source);
                Assert.Equal("B2C", result.ObligationType);
            }
        }
        public async Task FetchResultsAsync_WithLargeHouseHoldAppliancesAmount_ReturnsNullForAllOtherCategories()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                Quarter quarter = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeCollectedAmount amount1 = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amount1);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.NotNull(result.Category1);
                Assert.Null(result.Category2);
                Assert.Null(result.Category3);
                Assert.Null(result.Category4);
                Assert.Null(result.Category5);
                Assert.Null(result.Category6);
                Assert.Null(result.Category7);
                Assert.Null(result.Category8);
                Assert.Null(result.Category9);
                Assert.Null(result.Category10);
                Assert.Null(result.Category11);
                Assert.Null(result.Category12);
                Assert.Null(result.Category13);
                Assert.Null(result.Category14);
            }
        }
        public async Task FetchResultsAsync_WithSeveralOutputAmounts_ReturnsSumOfAmounts()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                RegisteredProducer registeredProducer1 = new RegisteredProducer("WEE/AA1111AA", 2099, scheme);
                RegisteredProducer registeredProducer2 = new RegisteredProducer("WEE/BB2222BB", 2099, scheme);

                Quarter quarter = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                EeeOutputAmount amount1 = new EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    100,
                    registeredProducer1);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amount1);

                EeeOutputAmount amount2 = new EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    200,
                    registeredProducer2);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amount2);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(1, results.Count);

                DataReturnSummaryCsvData result = results[0];
                Assert.NotNull(result);

                Assert.Equal(300, result.Category1);
            }
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_DoesNotContainReturnData_WithNoDataForNewReturn_ReturnsNullReturnVersions()
        {
            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, null, null, null);
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
               .Returns(dataReturn);

            var builder = helper.Create();

            var result = await builder.Build();

            Assert.Null(result.DataReturnVersion.WeeeCollectedReturnVersion);
            Assert.Null(result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Null(result.DataReturnVersion.EeeOutputReturnVersion);
        }
        public void CreateResults_ForDataReturnVersionWithNullWeeeDeliveredDataReturnVersion_DoesNotIncludeWeeeDeliveredDataReturnVersionItemsInResults()
        {
            // Arrange
            IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights();

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                authorization,
                A.Dummy<IGetUkWeeeCsvDataAccess>(),
                A.Dummy<CsvWriterFactory>());

            var dataReturn = new DataReturn(A.Fake<Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q1));
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(), null, A.Dummy<EeeOutputReturnVersion>());
            dataReturn.SetCurrentVersion(dataReturnVersion);

            // Act
            var result = handler.CreateResults(new List<DataReturn> { dataReturn });

            // Assert
            Assert.All(result, r => Assert.Null(r.DeliveredQ1));
        }
        public void CreateResults_WithSeveralDcfCollectedAmountsInDifferentQuarters_PopulatesDcfTotalWithSum()
        {
            // Arrange
            DataReturn dataReturn1 = new DataReturn(A.Dummy<Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q2));

            DataReturnVersion dataReturnVersion1 = new DataReturnVersion(dataReturn1);

            WeeeCollectedAmount weeeCollectedAmount1 = new WeeeCollectedAmount(
                WeeeCollectedAmountSourceType.Dcf,
                DomainObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                100);

            dataReturnVersion1.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount1);

            dataReturn1.SetCurrentVersion(dataReturnVersion1);

            DataReturn dataReturn2 = new DataReturn(A.Dummy<Domain.Scheme.Scheme>(), new Quarter(2016, QuarterType.Q4));

            DataReturnVersion dataReturnVersion2 = new DataReturnVersion(dataReturn2);

            WeeeCollectedAmount weeeCollectedAmount2 = new WeeeCollectedAmount(
                WeeeCollectedAmountSourceType.Dcf,
                DomainObligationType.B2C,
                WeeeCategory.LargeHouseholdAppliances,
                200);

            dataReturnVersion2.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(weeeCollectedAmount2);

            dataReturn2.SetCurrentVersion(dataReturnVersion2);

            GetUkWeeeCsvHandler handler = new GetUkWeeeCsvHandler(
                A.Dummy<IWeeeAuthorization>(),
                A.Dummy<IGetUkWeeeCsvDataAccess>(),
                A.Dummy<CsvWriterFactory>());

            // Act
            IEnumerable<GetUkWeeeCsvHandler.CsvResult> results = handler.CreateResults(new List<DataReturn>() { dataReturn1, dataReturn2 });

            // Assert
            GetUkWeeeCsvHandler.CsvResult result = results
                .Single(r => r.Category == WeeeCategory.LargeHouseholdAppliances && r.ObligationType == DomainObligationType.B2C);
            Assert.NotNull(result);

            Assert.Equal(300, result.DcfTotal);
        }
        public async Task Build_ExistingLatestSubmittedDataReturnVersion_WithNoExistingWeeeDeliveredReturnVersion_ReturnsDataReturnVersionWithNewWeeeDeliveredReturnVersion()
        {
            var dataReturn = new DataReturn(A.Dummy<Scheme>(), A.Dummy<Quarter>());
            var dataReturnVersion = new DataReturnVersion(dataReturn, A.Dummy<WeeeCollectedReturnVersion>(),
                null, A.Dummy<EeeOutputReturnVersion>());
            dataReturn.SetCurrentVersion(dataReturnVersion);

            var helper = new DataReturnVersionBuilderHelper();

            A.CallTo(() => helper.DataAccess.FetchDataReturnOrDefault())
                .Returns(dataReturn);

            var builder = helper.Create();
            await builder.AddAatfDeliveredAmount("ApprovalNumber", "FacilityName", WeeeCategory.ConsumerEquipment, ObligationType.B2C, 100);

            var result = await builder.Build();

            Assert.NotNull(result.DataReturnVersion.WeeeDeliveredReturnVersion);
            Assert.Equal(1, result.DataReturnVersion.WeeeDeliveredReturnVersion.WeeeDeliveredAmounts.Count);
        }
        public async Task FetchResultsAsync_WithOneAmountOfEachTypeAndSourceAndObligationType_ReturnsResultForEachAmountWithCorrectOrdering()
        {
            using (Weee.Tests.Core.Model.DatabaseWrapper wrapper = new Weee.Tests.Core.Model.DatabaseWrapper())
            {
                // Arrange
                Organisation organisation = Organisation.CreateSoleTrader("Test Organisation");
                Scheme scheme = new Scheme(organisation);

                RegisteredProducer registeredProducer1 = new RegisteredProducer("WEE/AA9365AA", 2099, scheme);

                Quarter quarter = new Quarter(2099, QuarterType.Q1);
                DataReturn dataReturn = new DataReturn(scheme, quarter);

                DataReturnVersion version = new DataReturnVersion(dataReturn);

                WeeeCollectedAmount amountCollectedDcfB2C = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountCollectedDcfB2C);

                WeeeCollectedAmount amountCollectedDistributor = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Distributor,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountCollectedDistributor);

                WeeeCollectedAmount amountCollectedFinalHolder = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.FinalHolder,
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountCollectedFinalHolder);

                WeeeDeliveredAmount amountDeliveredAatfB2C = new WeeeDeliveredAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AatfDeliveryLocation("WEE/AA6845AA/ATF", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amountDeliveredAatfB2C);

                WeeeDeliveredAmount amountDeliveredAeB2C = new WeeeDeliveredAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AeDeliveryLocation("WEE/AA2658AA/AE", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amountDeliveredAeB2C);

                EeeOutputAmount amountOutputB2C = new EeeOutputAmount(
                    ObligationType.B2C,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    registeredProducer1);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amountOutputB2C);

                WeeeCollectedAmount amountCollectedDcfB2B = new WeeeCollectedAmount(
                    WeeeCollectedAmountSourceType.Dcf,
                    ObligationType.B2B,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m);
                version.WeeeCollectedReturnVersion.AddWeeeCollectedAmount(amountCollectedDcfB2B);

                WeeeDeliveredAmount amountDeliveredAatfB2B = new WeeeDeliveredAmount(
                    ObligationType.B2B,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AatfDeliveryLocation("WEE/AA7445AA/ATF", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amountDeliveredAatfB2B);

                WeeeDeliveredAmount amountDeliveredAeB2B = new WeeeDeliveredAmount(
                    ObligationType.B2B,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    new AeDeliveryLocation("WEE/AA3658AA/AE", string.Empty));
                version.WeeeDeliveredReturnVersion.AddWeeeDeliveredAmount(amountDeliveredAeB2B);

                EeeOutputAmount amountOutputB2B = new EeeOutputAmount(
                    ObligationType.B2B,
                    WeeeCategory.LargeHouseholdAppliances,
                    123.456m,
                    registeredProducer1);
                version.EeeOutputReturnVersion.AddEeeOutputAmount(amountOutputB2B);

                wrapper.WeeeContext.DataReturns.Add(dataReturn);
                await wrapper.WeeeContext.SaveChangesAsync();

                dataReturn.SetCurrentVersion(version);
                await wrapper.WeeeContext.SaveChangesAsync();

                // Act
                FetchSummaryCsvDataAccess dataAccess = new FetchSummaryCsvDataAccess(wrapper.WeeeContext);

                List<DataReturnSummaryCsvData> results = await dataAccess.FetchResultsAsync(scheme.Id, 2099);

                // Assert
                Assert.NotNull(results);
                Assert.Equal(10, results.Count);
                Assert.Collection(results,
                    r => { Assert.Equal(0, r.Type); Assert.Equal(0, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(0, r.Type); Assert.Equal(0, r.Source); Assert.Equal("B2B", r.ObligationType); },
                    r => { Assert.Equal(0, r.Type); Assert.Equal(1, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(0, r.Type); Assert.Equal(2, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(1, r.Type); Assert.Equal(0, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(1, r.Type); Assert.Equal(0, r.Source); Assert.Equal("B2B", r.ObligationType); },
                    r => { Assert.Equal(1, r.Type); Assert.Equal(1, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(1, r.Type); Assert.Equal(1, r.Source); Assert.Equal("B2B", r.ObligationType); },
                    r => { Assert.Equal(2, r.Type); Assert.Equal(null, r.Source); Assert.Equal("B2C", r.ObligationType); },
                    r => { Assert.Equal(2, r.Type); Assert.Equal(null, r.Source); Assert.Equal("B2B", r.ObligationType); });
            }
        }
        public async Task HandleAsync_WithDataReturnWithNoEee_SetsHasSubmittedEEEToFalse()
        {
            // Arrange
            IWeeeAuthorization authorization = AuthorizationBuilder.CreateUserWithAllRights();

            Organisation organisation = Organisation.CreateSoleTrader("Trading Name");

            Scheme scheme = new Scheme(organisation);

            RegisteredProducer registeredProducer = new RegisteredProducer("WEE/AA1111AA", 2016, scheme);

            Guid registeredProducerId = new Guid("75B6B4E7-BA92-477D-A6CA-C43C8C0E9823");
            typeof(Entity).GetProperty("Id").SetValue(registeredProducer, registeredProducerId);

            MemberUpload memberUpload = new MemberUpload(
                A.Dummy<Guid>(),
                "data",
                new List<MemberUploadError>(),
                0,
                2016,
                scheme,
                "file.xml",
                "UserID");

            ProducerSubmission producerSubmission = new ProducerSubmission(
                registeredProducer,
                memberUpload,
                A.Dummy<ProducerBusiness>(),
                A.Dummy<AuthorisedRepresentative>(),
                A.Dummy<DateTime>(),
                A.Dummy<decimal?>(),
                A.Dummy<bool>(),
                A.Dummy<DateTime?>(),
                A.Dummy<string>(),
                A.Dummy<EEEPlacedOnMarketBandType>(),
                A.Dummy<SellingTechniqueType>(),
                A.Dummy<ObligationType>(),
                A.Dummy<AnnualTurnOverBandType>(),
                A.Dummy<List<BrandName>>(),
                A.Dummy<List<SICCode>>(),
                A.Dummy<ChargeBandAmount>(),
                A.Dummy<decimal>());

            registeredProducer.SetCurrentSubmission(producerSubmission);
            DataReturn dataReturn = new DataReturn(scheme, new Quarter(2016, QuarterType.Q4));

            DataReturnVersion dataReturnVersion = new DataReturnVersion(dataReturn);

            dataReturnVersion.Submit("UserID");

            IGetProducerDetailsByRegisteredProducerIdDataAccess dataAccess = A.Fake<IGetProducerDetailsByRegisteredProducerIdDataAccess>();

            A.CallTo(() => dataAccess.Fetch(registeredProducerId)).Returns(registeredProducer);
            A.CallTo(() => dataAccess.FetchDataReturns(scheme, 2016)).Returns(new List<DataReturn>() { dataReturn });

            GetProducerDetailsByRegisteredProducerIdHandler handler = new GetProducerDetailsByRegisteredProducerIdHandler(dataAccess, authorization);

            // Act
            GetProducerDetailsByRegisteredProducerId request = new GetProducerDetailsByRegisteredProducerId(registeredProducerId);
            ProducerDetailsScheme result = await handler.HandleAsync(request);

            // Assert
            Assert.Equal(false, result.HasSubmittedEEE);
        }