Beispiel #1
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            ValueFrequency = await _context.ValueFrequency.FirstOrDefaultAsync(m => m.Id == id);

            if (ValueFrequency == null)
            {
                return(NotFound());
            }
            return(Page());
        }
        public ServiceResult <PortfolioValueResponse> GetValue(DateRange dateRange, ValueFrequency frequency)
        {
            if (_Portfolio == null)
            {
                return(ServiceResult <PortfolioValueResponse> .NotFound());
            }

            var response = new PortfolioValueResponse();

            var dates = GetDates(dateRange, frequency);

            var holdings = _Portfolio.Holdings.All(dateRange);

            var closingBalances          = _Portfolio.CashAccount.EffectiveBalances(dateRange);
            var closingBalanceEnumerator = closingBalances.GetEnumerator();

            closingBalanceEnumerator.MoveNext();

            foreach (var date in dates)
            {
                var amount = 0.00m;

                // Add holding values
                foreach (var holding in holdings)
                {
                    amount += holding.Value(date);
                }

                // Add cash account balances
                if (date > closingBalanceEnumerator.Current.EffectivePeriod.ToDate)
                {
                    closingBalanceEnumerator.MoveNext();
                }
                amount += closingBalanceEnumerator.Current.Balance;

                var value = new ClosingPrice()
                {
                    Date  = date,
                    Price = amount
                };

                response.Values.Add(value);
            }

            return(ServiceResult <PortfolioValueResponse> .Ok(response));
        }
        private IEnumerable <Date> GetDates(DateRange dateRange, ValueFrequency frequency)
        {
            var firstRequestedDate = _TradingCalendar.NextTradingDay(dateRange.FromDate);
            var lastRequestedDate  = _TradingCalendar.PreviousTradingDay(dateRange.ToDate);

            IEnumerable <Date> dates;

            if (frequency == ValueFrequency.Day)
            {
                dates = _TradingCalendar.TradingDays(dateRange);
            }
            else if (frequency == ValueFrequency.Week)
            {
                dates = DateUtils.WeekEndingDays(dateRange);
            }
            else if (frequency == ValueFrequency.Month)
            {
                dates = DateUtils.MonthEndingDays(dateRange);
            }
            else
            {
                dates = new Date[] { firstRequestedDate, lastRequestedDate }
            };


            if (firstRequestedDate < dates.First())
            {
                yield return(firstRequestedDate);
            }

            Date lastDate = lastRequestedDate;

            foreach (var date in dates)
            {
                yield return(date);

                lastDate = date;
            }

            if (lastDate < lastRequestedDate)
            {
                yield return(lastRequestedDate);
            }
        }
    }
Beispiel #4
0
        public async Task GetValue(ValueFrequency frequency, string queryString)
        {
            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 PortfolioValueResponse();

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

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

            var resource = new PortfolioResource(messageHandler.Object);

            var result = await resource.GetValue(dateRange, frequency);

            result.Should().Be(response);

            mockRepository.Verify();
        }
        public ServiceResult <PortfolioValueResponse> GetValue(Guid stockId, DateRange dateRange, ValueFrequency frequency)
        {
            if (_Portfolio == null)
            {
                return(ServiceResult <PortfolioValueResponse> .NotFound());
            }

            var holding = _Portfolio.Holdings[stockId];

            if (holding == null)
            {
                return(ServiceResult <PortfolioValueResponse> .NotFound());
            }

            var response = new PortfolioValueResponse();

            var dates = GetDates(dateRange, frequency);

            foreach (var date in dates)
            {
                var value = new ClosingPrice()
                {
                    Date  = date,
                    Price = holding.Value(date)
                };

                response.Values.Add(value);
            }

            return(ServiceResult <PortfolioValueResponse> .Ok(response));
        }
Beispiel #6
0
        public async Task <PortfolioValueResponse> GetValue(Guid stockId, DateRange dateRange, ValueFrequency frequency)
        {
            var url = "/api/portfolio/" + _MessageHandler.Portfolio + "/holdings/" + stockId + "/value?fromdate=" + dateRange.FromDate.ToIsoDateString() + "&todate=" + dateRange.ToDate.ToIsoDateString() + "&frequency=" + frequency.ToString();

            return(await _MessageHandler.GetAsync <PortfolioValueResponse>(url));
        }
Beispiel #7
0
        public async Task <PortfolioValueResponse> GetValue(DateRange dateRange, ValueFrequency frequency)
        {
            var url = "portfolio/" + _MessageHandler.Portfolio + "/value?fromdate=" + dateRange.FromDate.ToIsoDateString() + "&todate=" + dateRange.ToDate.ToIsoDateString() + "&frequency=" + frequency.ToString().ToLower();

            return(await _MessageHandler.GetAsync <PortfolioValueResponse>(url));
        }