public OmniDataFileLineModel CreateYearToDateLineModel(
            FeeType feeType)
        {
            var yearToDateRequest = CalculateReturnRequestFactory.YearToDate(_endMonth);

            var yearToDateResult = _portfolio.CalculateReturn(yearToDateRequest, feeType);

            if (yearToDateResult.HasError)
            {
                return(null);
            }

            return(CreateYearToDateModel(_endMonth, yearToDateResult, feeType));
        }
        public void TwelveMonthShouldReturnRequestForThreeBeforeTheGivenEndDate()
        {
            var monthYear = new MonthYear(2000, 5);

            var request = CalculateReturnRequestFactory.TwelveMonth(monthYear);

            var expected = new CalculateReturnRequest()
            {
                AnnualizeAction = AnnualizeActionEnum.Annualize,
                EndMonth        = monthYear,
                NumberOfMonths  = 12
            };

            AssertRequestAreEqual(request, expected);
        }
        public void YearToDateShouldReturnRequestFromFirstOfYearToEndMonth(
            int year,
            int month,
            int expectedNumberOfMonths)
        {
            var monthYear = new MonthYear(year, month);

            var request = CalculateReturnRequestFactory.YearToDate(monthYear);

            var expected = new CalculateReturnRequest()
            {
                AnnualizeAction = AnnualizeActionEnum.Annualize,
                EndMonth        = monthYear,
                NumberOfMonths  = expectedNumberOfMonths
            };

            AssertRequestAreEqual(request, expected);
        }
        public IEnumerable <OmniDataFileLineModel> CreateQuarterLineModels(FeeType feeType)
        {
            var models = new List <OmniDataFileLineModel>();

            _januaryToGivenMonth.ForEachMonthInRange(
                m =>
            {
                if (m.IsLastMonthOfQuarter)
                {
                    var calculateQuarterRequest = CalculateReturnRequestFactory.ThreeMonth(m);

                    var netQuarterResult = _portfolio.CalculateReturn(calculateQuarterRequest, feeType);

                    if (!netQuarterResult.HasError)
                    {
                        models.Add(CreateQuarterModel(m, netQuarterResult, feeType));
                    }
                }
            });

            return(models);
        }
        private PortfolioListRecord CreatePortfolioRecord(
            MonthYear monthYear,
            InvestmentVehicle portfolio)
        {
            var oneMonth = CalculateNetOfFeesReturn(portfolio,
                                                    CalculateReturnRequestFactory.OneMonth(monthYear));

            var threeMonth = CalculateNetOfFeesReturn(portfolio,
                                                      CalculateReturnRequestFactory.ThreeMonth(monthYear));

            var yearToDate = CalculateNetOfFeesReturn(portfolio,
                                                      CalculateReturnRequestFactory.YearToDate(monthYear));

            var record = new PortfolioListRecord()
            {
                PortfolioNumber = portfolio.Number,
                PortfolioName   = portfolio.Name,
                OneMonth        = oneMonth,
                ThreeMonth      = threeMonth,
                YearToDate      = yearToDate
            };

            return(record);
        }
        private PerformanceReportExcelReportRecordModel CreateExcelRecord(
            InvestmentVehicle portfolio,
            MonthYear monthYear,
            FeeType feeType,
            string entityType)
        {
            var recordModel = new PerformanceReportExcelReportRecordModel()
            {
                EntityNumber = portfolio.Number,
                Name         = portfolio.Name,
                Type         = entityType,
                FeeType      = feeType.DisplayName,
            };

            var oneMonthRequest = CalculateReturnRequestFactory.OneMonth(monthYear);
            var oneMonthResult  = portfolio.CalculateReturn(oneMonthRequest, feeType);

            recordModel.OneMonth = oneMonthResult.GetValueNullOnError();

            var threeMonthRequest = CalculateReturnRequestFactory.ThreeMonth(monthYear);
            var threeMonthResult  = portfolio.CalculateReturn(threeMonthRequest, feeType);

            recordModel.ThreeMonths = threeMonthResult.GetValueNullOnError();

            var twelveMonthRequest = CalculateReturnRequestFactory.TwelveMonth(monthYear);
            var twelveMonthResult  = portfolio.CalculateReturn(twelveMonthRequest, feeType);

            recordModel.TwelveMonths = twelveMonthResult.GetValueNullOnError();

            var yearToDateRequest = CalculateReturnRequestFactory.YearToDate(monthYear);
            var yearToDateResult  = portfolio.CalculateReturn(yearToDateRequest, feeType);

            recordModel.YearToDate = yearToDateResult.GetValueNullOnError();

            return(recordModel);
        }