public async Task <OperationResult <ValuePercent> > AggregatePaymentProfit(IEnumerable <int> portfolioIds, int userId)
        {
            var sumProfit = 0;
            var sumInvest = 0;

            var ids = portfolioIds.ToList();

            foreach (var portfolioId in ids)
            {
                var resultProfit = await _portfolioService.GetPortfolioPaymentProfit(portfolioId, userId);

                var resultInvestSum = _balanceService.GetInvestSum(portfolioId, userId);

                if (!resultProfit.IsSuccess)
                {
                    return(resultProfit);
                }

                sumProfit += resultProfit.Result.Value;
                sumInvest += resultInvestSum;
            }

            var percent = FinanceHelpers.DivWithOneDigitRound(sumProfit, sumInvest);

            return(new OperationResult <ValuePercent>()
            {
                IsSuccess = true,
                Message = $"Суммарная дивидендная прибыль портфелей(я) c id={string.Join(", ", ids)}",
                Result = new ValuePercent()
                {
                    Value = sumProfit,
                    Percent = percent
                }
            });
        }
        public void GetInvestSum()
        {
            var sum1 = _balanceService.GetInvestSum(1, 1);
            var sum2 = _balanceService.GetInvestSum(2, 1);
            var sum3 = _balanceService.GetInvestSum(3, 2);

            var sum4 = _balanceService.GetInvestSum(3, 3);

            Assert.AreEqual(2300000, sum1);
            Assert.AreEqual(50000, sum2);
            Assert.AreEqual(50000, sum3);

            Assert.AreEqual(0, sum4);
        }
Пример #3
0
        public async Task <OperationResult <ValuePercent> > GetPaperProfit(int portfolioId, int userId)
        {
            var portfolio = await _financeData.EfContext.Portfolios.FindAsync(portfolioId);

            var validationResult = CommonValidate <ValuePercent>(portfolioId, userId, portfolio);

            if (validationResult != null)
            {
                return(validationResult);
            }

            var portfolioData = GetPortfolioData(portfolioId);

            var sumProfit = 0;

            foreach (var asset in portfolioData.Assets)
            {
                var profit = await asset.GetPaperProfit();

                sumProfit += profit;
            }

            var investingSum = _balanceService.GetInvestSum(portfolioId, userId);
            var percent      = FinanceHelpers.DivWithOneDigitRound(sumProfit, investingSum);

            return(new OperationResult <ValuePercent>()
            {
                IsSuccess = true,
                Message = $"Бумажная прибыль портфеля {portfolio.Name}",
                Result = new ValuePercent()
                {
                    Value = sumProfit,
                    Percent = percent
                }
            });
        }