コード例 #1
0
        public async Task GetReturnData_GivenReturn_QuarterWindowShouldBeRetrieved()
        {
            var @return = new Return(A.Fake <Organisation>(), A.Fake <Quarter>(), "id", A.Fake <FacilityType>());

            A.CallTo(() => returnDataAccess.GetById(A <Guid> ._)).Returns(@return);

            var result = await populatedReturn.GetReturnData(A.Dummy <Guid>(), A.Dummy <bool>());

            A.CallTo(() => quarterWindowFactory.GetQuarterWindow(@return.Quarter)).MustHaveHappened(Repeated.Exactly.Once);
        }
コード例 #2
0
        private async Task ActionAndAssertApprovalDate(Action <Guid> assertion, DateTime?approvalDate, DateTime windowStartDate)
        {
            using (database = new DatabaseWrapper())
            {
                var helper       = new ModelHelper(database.Model);
                var domainHelper = new DomainHelper(database.WeeeContext);
                var userContext  = A.Fake <IUserContext>();

                A.CallTo(() => userContext.UserId).Returns(Guid.Parse(database.Model.AspNetUsers.First().Id));
                A.CallTo(() => quarterWindowFactory.GetQuarterWindow(A <Quarter> ._))
                .Returns(new Domain.DataReturns.QuarterWindow(windowStartDate, windowStartDate.AddDays(1), QuarterType.Q1));

                await CreateReturnToCopy(approvalDate);

                var message = new CopyReturn(@return.Id);

                var authorization = new AuthorizationBuilder().AllowEverything().Build();

                handler = new CopyReturnHandler(authorization,
                                                database.WeeeContext,
                                                userContext,
                                                quarterWindowFactory);

                var result = await handler.HandleAsync(message);

                @return      = database.WeeeContext.Returns.AsNoTracking().First(r => r.Id == message.ReturnId);
                copiedReturn = database.WeeeContext.Returns.First(r => r.Id == result);

                assertion(result);
            }
        }
コード例 #3
0
ファイル: GetPopulatedReturn.cs プロジェクト: DEFRA/prsd-weee
        public async Task <ReturnData> GetReturnData(Guid returnId, bool forSummary)
        {
            authorization.EnsureCanAccessExternalArea();

            var @return = await returnDataAccess.GetById(returnId);

            if (@return == null)
            {
                throw new ArgumentException($"No return found for return id {returnId}");
            }

            authorization.EnsureOrganisationAccess(@return.Organisation.Id);

            var annualQuarterWindow = await quarterWindowFactory.GetQuarterWindow(@return.Quarter);

            var returnNonObligatedValues = await nonObligatedDataAccess.FetchNonObligatedWeeeForReturn(returnId);

            var returnObligatedReceivedValues = await obligatedDataAccess.FetchObligatedWeeeReceivedForReturn(returnId);

            var returnObligatedReusedValues = await obligatedDataAccess.FetchObligatedWeeeReusedForReturn(returnId);

            List <Aatf> aatfs;

            if (forSummary && @return.ReturnStatus.Equals(EA.Weee.Domain.AatfReturn.ReturnStatus.Submitted))
            {
                aatfs = await aatfDataAccess.FetchAatfByReturnId(@return.Id);
            }
            else
            {
                aatfs = await aatfDataAccess.FetchAatfByReturnQuarterWindow(@return);
            }

            var sentOn = await obligatedDataAccess.FetchObligatedWeeeSentOnForReturnByReturn(returnId);

            var returnSchemeList = await returnSchemeDataAccess.GetSelectedSchemesByReturnId(returnId);

            var returnReportsOn = await genericDataAccess.GetManyByExpression(new ReturnReportOnByReturnIdSpecification(returnId));

            var currentDate    = SystemTime.Now;
            var systemSettings = await systemDataDataAccess.Get();

            if (systemSettings.UseFixedCurrentDate)
            {
                currentDate = systemSettings.FixedCurrentDate;
            }

            var returnQuarterWindow = new ReturnQuarterWindow(@return,
                                                              annualQuarterWindow,
                                                              aatfs,
                                                              returnNonObligatedValues,
                                                              returnObligatedReceivedValues,
                                                              returnObligatedReusedValues,
                                                              @return.Organisation,
                                                              sentOn,
                                                              returnSchemeList,
                                                              returnReportsOn,
                                                              currentDate);

            return(mapper.Map(returnQuarterWindow));
        }
コード例 #4
0
        public async Task <List <Aatf> > FetchAatfByReturnQuarterWindow(Return @return)
        {
            var quarterWindow = await quarterWindowFactory.GetQuarterWindow(@return.Quarter);

            return(await context.Aatfs.Where(a => a.Organisation.Id == @return.Organisation.Id &&
                                             a.FacilityType.Value == @return.FacilityType.Value &&
                                             a.ComplianceYear == @return.Quarter.Year &&
                                             a.ApprovalDate.HasValue &&
                                             a.ApprovalDate.Value < quarterWindow.StartDate.Date).Select(a => a).OrderBy(a => a.Name).ToListAsync());
        }
コード例 #5
0
        public async Task FetchAatfByReturnQuarterWindow_GivenMatchingParameters_ReturnedListContainsAatf()
        {
            using (var database = new DatabaseWrapper())
            {
                var helper            = new ModelHelper(database.Model);
                var domainHelper      = new DomainHelper(database.WeeeContext);
                var dataAccess        = new FetchAatfDataAccess(database.WeeeContext, quarterWindowFactory);
                var genericDataAccess = new GenericDataAccess(database.WeeeContext);

                var aatf = await CreateAatf(database, FacilityType.Aatf, DateTime.Now, 2019);

                var @return = new Return(aatf.Organisation, new Quarter(2019, QuarterType.Q1), "created", FacilityType.Aatf);

                A.CallTo(() => quarterWindowFactory.GetQuarterWindow(@return.Quarter)).Returns(new QuarterWindow(DateTime.Now.AddDays(1), DateTime.Now.AddDays(1), QuarterType.Q1));

                await genericDataAccess.AddMany <Aatf>(new List <Aatf>() { aatf });

                var aatfList = await dataAccess.FetchAatfByReturnQuarterWindow(@return);

                aatfList.Should().Contain(aatf);
            }
        }
コード例 #6
0
ファイル: CopyReturnHandler.cs プロジェクト: DEFRA/prsd-weee
        private async Task RemoveAatfsWithInvalidApprovalDate(Return returnCopy)
        {
            var quarterWindow = await quarterWindowFactory.GetQuarterWindow(returnCopy.Quarter);

            var sentOnToRemove = context.WeeeSentOn.Where(Predicate <WeeeSentOn>(quarterWindow, returnCopy))
                                 .Include(w => w.WeeeSentOnAmounts).ToList();

            context.WeeeSentOnAmount.RemoveRange(sentOnToRemove.SelectMany(r => r.WeeeSentOnAmounts));
            context.WeeeSentOn.RemoveRange(sentOnToRemove);

            var reusedToRemove = context.WeeeReused.Where(Predicate <WeeeReused>(quarterWindow, returnCopy))
                                 .Include(w => w.WeeeReusedAmounts)
                                 .Include(w => w.WeeeReusedSites).ToList();

            context.WeeeReusedAmount.RemoveRange(reusedToRemove.SelectMany(r => r.WeeeReusedAmounts));
            context.WeeeReusedSite.RemoveRange(reusedToRemove.SelectMany(r => r.WeeeReusedSites));
            context.WeeeReused.RemoveRange(reusedToRemove);

            var receivedToRemove = context.WeeeReceived.Where(Predicate <WeeeReceived>(quarterWindow, returnCopy))
                                   .Include(w => w.WeeeReceivedAmounts).ToList();

            context.WeeeReceivedAmount.RemoveRange(receivedToRemove.SelectMany(r => r.WeeeReceivedAmounts));
            context.WeeeReceived.RemoveRange(receivedToRemove);
        }
コード例 #7
0
        public async Task <IEnumerable <ErrorData> > Validate(Quarter quarter)
        {
            var result = new List <ErrorData>();

            var currentDate    = SystemTime.Now;
            var systemSettings = await systemDataDataAccess.Get();

            if (systemSettings.UseFixedCurrentDate)
            {
                currentDate = systemSettings.FixedCurrentDate;
            }

            var quarterWindow = await quarterWindowFactory.GetQuarterWindow(quarter);

            if (quarterWindow.IsBeforeWindow(currentDate))
            {
                var errorMessage = string.Format(
                    "The submission window for {0} {1} has not yet opened. The submission window will open on the {2}, resubmit your return XML file on or after this date.",
                    quarter.Q, quarter.Year, quarterWindow.StartDate.ToString("dd MMM yyyy"));

                result.Add(new ErrorData(errorMessage, ErrorLevel.Error));
                return(result);
            }

            if (quarterWindow.IsAfterWindow(currentDate))
            {
                var errorMessage = string.Format(
                    "The window for resubmitting data returns for the {0} compliance period has closed.",
                    quarter.Year);

                result.Add(new ErrorData(errorMessage, ErrorLevel.Error));
                return(result);
            }

            return(result);
        }
コード例 #8
0
        public CopyReturnHandlerTests()
        {
            quarterWindowFactory = A.Fake <IQuarterWindowFactory>();

            A.CallTo(() => quarterWindowFactory.GetQuarterWindow(A <Quarter> ._)).Returns(new EA.Weee.Domain.DataReturns.QuarterWindow(DateTime.MaxValue, DateTime.MinValue, QuarterType.Q1));
        }