private string WorkOutErrorMessageForNotAllowingCreateReturn(ReturnsData source)
        {
            if (!WindowHelper.IsThereAnOpenWindow(source.CurrentDate))
            {
                return
                    ($"The {source.CurrentDate.AddYears(-1).Year} compliance period has closed. You can start submitting your {source.CurrentDate.Year} Q1 returns on 1st April.");
            }
            foreach (Quarter q in source.OpenQuarters)
            {
                if (source.ReturnsList.Count(p => p.Quarter == q) > 0)
                {
                    QuarterType nextQuarter = WorkOutNextQuarter(source.OpenQuarters);

                    int startYear;
                    if (nextQuarter == QuarterType.Q4)
                    {
                        startYear = source.NextWindow.WindowOpenDate.Year - 1;
                    }
                    else
                    {
                        startYear = source.NextWindow.WindowOpenDate.Year;
                    }

                    return
                        ($"Returns have been started or submitted for all open quarters. You can start submitting your {startYear} {nextQuarter} returns on {source.NextWindow.WindowOpenDate.ToReadableDateTime()}.");
                }
            }
            return(NotExpectedError);
        }
        public void Map_GivenNoReturnQuarter_OpenQuarters_LatestOpenIsQ4_ErrorMessageSaysWhenNextQuarterAvailableIsQ1()
        {
            var openQuarters = new List <Quarter>()
            {
                new Quarter(2018, QuarterType.Q1),
                new Quarter(2018, QuarterType.Q2),
                new Quarter(2018, QuarterType.Q3),
                new Quarter(2018, QuarterType.Q4)
            };

            var nextQuarter = QuarterWindowTestHelper.GetQuarterOneWindow(2019);

            var returnData = new List <ReturnData>()
            {
                new ReturnData()
                {
                    Quarter = openQuarters[1]
                }
            };

            SystemTime.Freeze(new DateTime(2019, 01, 01));

            var returnsData = new ReturnsData(returnData, null, openQuarters, nextQuarter, new DateTime(2019, 01, 01));

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            SystemTime.Unfreeze();

            Assert.Equal(
                $"Returns have been started or submitted for all open quarters. You can start submitting your 2019 Q1 returns on 1st April.", result.ErrorMessageForNotAllowingCreateReturn);
        }
        public void Map_GivenMappedReturnsAreEditableAndThereAreNoInProgressReturnInComplianceYearAndQuarter_ReturnedShouldBeEditable()
        {
            var returnData = A.CollectionOfFake <ReturnData>(1).ToList();

            var returnsItems = new List <ReturnsItemViewModel>()
            {
                new ReturnsItemViewModel()
                {
                    ReturnViewModel = new ReturnViewModel(new ReturnData()
                    {
                        Quarter = new Quarter(2019, QuarterType.Q1), QuarterWindow = QuarterWindowTestHelper.GetDefaultQuarterWindow()
                    }, new List <AatfObligatedData>(), A.Fake <OrganisationData>(), new TaskListDisplayOptions()),
                    ReturnsListDisplayOptions = new ReturnsListDisplayOptions()
                    {
                        DisplayEdit = true
                    },
                }
            };

            A.CallTo(() => ordering.Order(A <List <ReturnData> > ._)).Returns(returnData);
            A.CallTo(() => returnItemViewModelMap.Map(A <ReturnData> ._)).ReturnsNextFromSequence(returnsItems.ToArray());

            var returnsData = new ReturnsData(returnData, null, A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(),
                                              DateTime.Now);

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            result.Returns.ElementAt(0).ReturnsListDisplayOptions.DisplayEdit.Should().BeTrue();
        }
        public void Map_GivenMappedReturnsAreForQuarterAndYearAreEditable_OnlyTheMostRecentRecordForYearAndQuarterShouldBeEditable()
        {
            var returnData = A.CollectionOfFake <ReturnData>(3).ToList();

            var dateNow  = DateTime.Now;
            var idToFind = Guid.NewGuid();

            var returnsItems = new List <ReturnsItemViewModel>()
            {
                new ReturnsItemViewModel()
                {
                    ReturnViewModel = new ReturnViewModel(new ReturnData()
                    {
                        CreatedDate = dateNow, Quarter = new Quarter(2019, QuarterType.Q1), QuarterWindow = QuarterWindowTestHelper.GetDefaultQuarterWindow()
                    }, new List <AatfObligatedData>(), A.Fake <OrganisationData>(), new TaskListDisplayOptions()),
                    ReturnsListDisplayOptions = new ReturnsListDisplayOptions()
                    {
                        DisplayEdit = true
                    }
                },
                new ReturnsItemViewModel()
                {
                    ReturnViewModel = new ReturnViewModel(new ReturnData()
                    {
                        Id = idToFind, CreatedDate = dateNow.AddDays(1), Quarter = new Quarter(2019, QuarterType.Q1), QuarterWindow = QuarterWindowTestHelper.GetDefaultQuarterWindow()
                    }, new List <AatfObligatedData>(), A.Fake <OrganisationData>(), new TaskListDisplayOptions()),
                    ReturnsListDisplayOptions = new ReturnsListDisplayOptions()
                    {
                        DisplayEdit = true
                    }
                },
                new ReturnsItemViewModel()
                {
                    ReturnViewModel = new ReturnViewModel(new ReturnData()
                    {
                        CreatedDate = dateNow.AddDays(-1), Quarter = new Quarter(2019, QuarterType.Q1), QuarterWindow = QuarterWindowTestHelper.GetDefaultQuarterWindow()
                    }, new List <AatfObligatedData>(), A.Fake <OrganisationData>(), new TaskListDisplayOptions()),
                    ReturnsListDisplayOptions = new ReturnsListDisplayOptions()
                    {
                        DisplayEdit = true
                    }
                }
            };

            A.CallTo(() => ordering.Order(A <List <ReturnData> > ._)).Returns(returnData);
            A.CallTo(() => returnItemViewModelMap.Map(A <ReturnData> ._)).ReturnsNextFromSequence(returnsItems.ToArray());

            var returnsData = new ReturnsData(returnData, null, A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(),
                                              DateTime.Now);

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            result.Returns.First(r => r.ReturnViewModel.ReturnId.Equals(idToFind)).ReturnsListDisplayOptions.DisplayEdit.Should().BeTrue();
            result.Returns.Count(r => r.ReturnsListDisplayOptions.DisplayEdit.Equals(false)).Should().Be(2);
        }
示例#5
0
        public async void IndexGet_GivenOrganisation_BreadcrumbShouldBeSet()
        {
            var returns = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returns);

            await controller.Index(A.Dummy <Guid>(), A.Dummy <int?>(), A.Dummy <string>());

            Assert.Equal(breadcrumb.ExternalActivity, BreadCrumbConstant.AatfReturn);
        }
示例#6
0
        public async void IndexGet_GivenOrganisation_ReturnsViewModelShouldBeBuilt()
        {
            var returnsData = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returnsData);

            await controller.Index(fixture.Create <Guid>(), fixture.Create <int?>(), fixture.Create <string>());

            A.CallTo(() => mapper.Map <ReturnsViewModel>(A <ReturnToReturnsViewModelTransfer> .That.Matches(r => r.ReturnsData == returnsData))).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#7
0
        public async void IndexGet_GivenOrganisation_DefaultViewShouldBeReturned()
        {
            var returns = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returns);

            var result = await controller.Index(A.Dummy <Guid>(), A.Dummy <int?>(), A.Dummy <string>()) as ViewResult;

            result.ViewName.Should().BeEmpty();
        }
示例#8
0
        private void OrderReturns(ReturnsData source, ReturnsViewModel model)
        {
            var orderedItems = ordering.Order(source.ReturnsList);

            foreach (var @return in orderedItems)
            {
                var returnViewModelItems = returnItemViewModelMap.Map(@return);

                model.Returns.Add(returnViewModelItems);
            }
        }
        public void Map_GivenReturnQuarter_DisplayCreateButtonShouldBeTrue()
        {
            var returnsData = new ReturnsData(A.CollectionOfFake <ReturnData>(1).ToList(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            result.DisplayCreateReturn.Should().BeTrue();
        }
        public void Map_GivenReturnQuarter_ComplianceReturnPropertiesShouldBeSet(QuarterType quarter)
        {
            var returnsData = new ReturnsData(A.CollectionOfFake <ReturnData>(1).ToList(), new Quarter(2019, quarter), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            result.ComplianceYear.Should().Be(2019);
            result.Quarter.Should().Be(quarter);
        }
示例#11
0
        public async void IndexGet_GivenOrganisation_ReturnsShouldBeRetrieved()
        {
            var returns = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returns);

            var organisationId = Guid.NewGuid();

            await controller.Index(organisationId, A.Dummy <int?>(), A.Dummy <string>());

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> .That.Matches(r => r.OrganisationId.Equals(organisationId))))
            .MustHaveHappened(Repeated.Exactly.Once);
        }
        public void Map_GivenNoReturnQuarter_NoOpenWindow_ErrorMessageShouldSayClosed()
        {
            var returnData = A.CollectionOfFake <ReturnData>(3).ToList();

            var returnsData = new ReturnsData(returnData, null, A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(),
                                              new DateTime(2019, 3, 17));

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            Assert.Equal("The 2018 compliance period has closed. You can start submitting your 2019 Q1 returns on 1st April.", result.ErrorMessageForNotAllowingCreateReturn);
        }
示例#13
0
        private void SetMessages(ReturnsData source, ReturnsViewModel model)
        {
            if (source.ReturnQuarter != null)
            {
                model.DisplayCreateReturn = true;
                model.ComplianceYear      = source.ReturnQuarter.Year;
                model.Quarter             = source.ReturnQuarter.Q;
            }
            else
            {
                model.ErrorMessageForNotAllowingCreateReturn = WorkOutErrorMessageForNotAllowingCreateReturn(source);

                model.NotStartedAnySubmissionsYet = model.ErrorMessageForNotAllowingCreateReturn != NotExpectedError;
            }
        }
示例#14
0
        public async void IndexGet_GivenOrganisationComplianceYearAndQuarterActionParameters_ReturnsViewModelShouldBeBuiltWithPassedParameters()
        {
            var returns = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returns);

            var selectedComplianceYear = fixture.Create <int>();
            var selectedQuarter        = fixture.Create <string>();

            await controller.Index(A.Dummy <Guid>(), selectedComplianceYear, selectedQuarter);

            A.CallTo(() => mapper.Map <ReturnsViewModel>(A <ReturnToReturnsViewModelTransfer> .That.Matches(r => r.ReturnsData == returns &&
                                                                                                            r.SelectedComplianceYear == selectedComplianceYear &&
                                                                                                            r.SelectedQuarter == selectedQuarter))).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void Map_GivenNoReturnQuarter_NoReturns_ErrorMessageDisplayedIsNotExpectedToSubmitReturn()
        {
            var returnData   = new List <ReturnData>();
            var openQuarters = new List <Quarter>();
            var nextQuarter  = QuarterWindowTestHelper.GetDefaultQuarterWindow();

            var returnsData = new ReturnsData(returnData, null, openQuarters, nextQuarter, new DateTime(2019, 3, 1));

            var result = returnsMap.Map(new ReturnToReturnsViewModelTransfer()
            {
                ReturnsData = returnsData
            });

            Assert.Equal("You aren’t expected to submit a return yet. If you think this is wrong, contact your environmental regulator.", result.ErrorMessageForNotAllowingCreateReturn);
        }
示例#16
0
        public virtual void Initialize()
        {
            var fullResults = OptimizerAppDomainManager.GetResults();
            //let's exclude non-trading tests and any marked as error/failure with -10 Sharpe
            var hasTraded = fullResults.Where(d => d.Value["TotalNumberOfTrades"] != 0 && d.Value["SharpeRatio"] > -10);

            SharpeData  = hasTraded.ToDictionary(k => k.Key, v => (double)v.Value["SharpeRatio"]);
            ReturnsData = hasTraded.ToDictionary(k => k.Key, v => (double)v.Value["CompoundingAnnualReturn"]);

            N = SharpeData.Count();
            var statistics = new DescriptiveStatistics(ReturnsData.Select(d => d.Value));

            V = new DescriptiveStatistics(SharpeData.Select(s => s.Value)).Variance;
            //measure only trading days
            T        = ((Config.EndDate - Config.StartDate).Value.TotalDays / 365) * days;
            Skewness = statistics.Skewness;
            Kurtosis = statistics.Kurtosis;
        }
示例#17
0
        public void ReturnsData_GivenConstructorParameters_PropertiesShouldBeMapped()
        {
            var            returnsList   = new List <ReturnData>();
            var            returnQuarter = new Quarter(2019, QuarterType.Q1);
            List <Quarter> openQuarters  = new List <Quarter>()
            {
                returnQuarter
            };

            QuarterWindow nextQuarter = new QuarterWindow(new DateTime(2020, 4, 1), new DateTime(2020, 7, 16), QuarterType.Q1);

            var returnsData = new ReturnsData(returnsList, returnQuarter, openQuarters, nextQuarter, DateTime.Now);

            returnsData.ReturnsList.Should().BeEquivalentTo(returnsList);
            returnsData.ReturnQuarter.Should().Be(returnQuarter);
            returnsData.OpenQuarters.Count.Should().Be(openQuarters.Count);
            returnsData.NextWindow.Should().Be(nextQuarter);
        }
示例#18
0
        public async void IndexGet_GivenOrganisation_ReturnsViewModelShouldBeReturnedWithAllReturns()
        {
            var returns = new ReturnsData(A.Fake <List <ReturnData> >(), new Quarter(2019, QuarterType.Q1), A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            A.CallTo(() => weeeClient.SendAsync(A <string> ._, A <GetReturns> ._)).Returns(returns);

            var model          = new ReturnsViewModel();
            var organisationId = Guid.NewGuid();

            A.CallTo(() => mapper.Map <ReturnsViewModel>(A <ReturnToReturnsViewModelTransfer> ._)).Returns(model);

            var result = await controller.Index(organisationId, A.Dummy <int?>(), A.Dummy <string>()) as ViewResult;

            var returnedModel = (ReturnsViewModel)model;

            returnedModel.Should().Be(model);
            returnedModel.OrganisationId.Should().Be(organisationId);
            returnedModel.Returns.Count.Should().Be(returns.ReturnsList.Count);
        }
示例#19
0
        public void ReturnsData_GivenNullReturnQuarter_ReturnQuarterPropertiesShouldBeNull()
        {
            var returnsData = new ReturnsData(A.Fake <List <ReturnData> >(), null, A.Fake <List <Quarter> >(), QuarterWindowTestHelper.GetDefaultQuarterWindow(), DateTime.Now);

            returnsData.ReturnQuarter.Should().BeNull();
        }