예제 #1
0
        public void GetCGTLiabilityBothDates()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var response = new CgtLiabilityResponse();

            var service = mockRepository.Create <IPortfolioCgtLiabilityService>();

            service.Setup(x => x.GetCGTLiability(new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31)))).Returns(ServiceResult <CgtLiabilityResponse> .Ok(response)).Verifiable();

            var controller = new PortfolioController();
            var result     = controller.GetCGTLiability(service.Object, new DateTime(2000, 01, 01), new DateTime(2000, 12, 31));

            result.Result.Should().BeOkObjectResult().Value.Should().Be(response);

            mockRepository.VerifyAll();
        }
예제 #2
0
        public void GetCGTLiabilityNoDates()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var response = new CgtLiabilityResponse();

            var service = mockRepository.Create <IPortfolioCgtLiabilityService>();

            service.Setup(x => x.GetCGTLiability(new DateRange(Date.Today.AddYears(-1).AddDays(1), Date.Today))).Returns(ServiceResult <CgtLiabilityResponse> .Ok(response)).Verifiable();

            var controller = new PortfolioController();
            var result     = controller.GetCGTLiability(service.Object, null, null);

            result.Result.Should().BeOkObjectResult().Value.Should().Be(response);

            mockRepository.VerifyAll();
        }
예제 #3
0
        public async Task GetCGTLiability()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolioId = Guid.NewGuid();
            var dateRange   = new DateRange(new Date(2001, 02, 03), new Date(2008, 06, 30));
            var response    = new CgtLiabilityResponse();

            var messageHandler = mockRepository.Create <IRestClientMessageHandler>();

            messageHandler.SetupProperty(x => x.Portfolio, portfolioId);
            messageHandler.Setup(x => x.GetAsync <CgtLiabilityResponse>(It.Is <string>(x => x == "portfolio/" + portfolioId + "/cgtliability?fromdate=2001-02-03&todate=2008-06-30")))
            .Returns(Task <CgtLiabilityResponse> .FromResult(response))
            .Verifiable();

            var resource = new PortfolioResource(messageHandler.Object);

            var result = await resource.GetCGTLiability(dateRange);

            result.Should().Be(response);

            mockRepository.Verify();
        }
        public ServiceResult <CgtLiabilityResponse> GetCGTLiability(DateRange dateRange)
        {
            if (_Portfolio == null)
            {
                return(ServiceResult <CgtLiabilityResponse> .NotFound());
            }

            var response = new CgtLiabilityResponse();

            // Get a list of all the cgt events for the year
            var cgtEvents = _Portfolio.CgtEvents.InDateRange(dateRange);

            foreach (var cgtEvent in cgtEvents)
            {
                var item = new CgtLiabilityResponse.CgtLiabilityEvent()
                {
                    Stock          = cgtEvent.Stock.ToSummaryResponse(cgtEvent.Date),
                    EventDate      = cgtEvent.Date,
                    CostBase       = cgtEvent.CostBase,
                    AmountReceived = cgtEvent.AmountReceived,
                    CapitalGain    = cgtEvent.CapitalGain,
                    Method         = cgtEvent.CgtMethod.ToResponse()
                };

                response.Events.Add(item);

                // Apportion capital gains
                if (cgtEvent.CapitalGain < 0)
                {
                    response.CurrentYearCapitalLossesTotal += -cgtEvent.CapitalGain;
                }
                else if (cgtEvent.CgtMethod == Domain.Portfolios.CgtMethod.Discount)
                {
                    response.CurrentYearCapitalGainsDiscounted += cgtEvent.CapitalGain;
                }
                else
                {
                    response.CurrentYearCapitalGainsOther += cgtEvent.CapitalGain;
                }
            }

            response.CurrentYearCapitalGainsTotal = response.CurrentYearCapitalGainsOther + response.CurrentYearCapitalGainsDiscounted;

            if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal)
            {
                response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalLossesTotal;
            }
            else
            {
                response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalGainsOther;
            }

            if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal)
            {
                response.CurrentYearCapitalLossesDiscounted = 0.00m;
            }
            else
            {
                response.CurrentYearCapitalLossesDiscounted = response.CurrentYearCapitalLossesTotal - response.CurrentYearCapitalGainsOther;
            }

            response.GrossCapitalGainOther      = response.CurrentYearCapitalGainsOther - response.CurrentYearCapitalLossesOther;
            response.GrossCapitalGainDiscounted = response.CurrentYearCapitalGainsDiscounted - response.CurrentYearCapitalLossesDiscounted;
            response.GrossCapitalGainTotal      = response.GrossCapitalGainOther + response.GrossCapitalGainDiscounted;
            if (response.GrossCapitalGainDiscounted > 0)
            {
                response.Discount = (response.GrossCapitalGainDiscounted / 2).ToCurrency(RoundingRule.Round);
            }
            else
            {
                response.Discount = 0.00m;
            }
            response.NetCapitalGainOther      = response.GrossCapitalGainOther;
            response.NetCapitalGainDiscounted = response.GrossCapitalGainDiscounted - response.Discount;
            response.NetCapitalGainTotal      = response.NetCapitalGainOther + response.NetCapitalGainDiscounted;

            return(ServiceResult <CgtLiabilityResponse> .Ok(response));
        }