public async Task <Abp.Application.Services.Dto.ListResultDto <CategoryReportListDto> > GetCategoryReport(GetCategoryReportRequestDto input) { var items = await _reportRepository.GetCategoryReport(new GetCategoryReportInput { StartDate = input.StartDate, EndDate = input.EndDate, UserId = AbpSession.UserId.Value }); var output = ObjectMapper.Map <List <CategoryReportListDto> >(items.Items); foreach (var dto in output) { dto.AmountInDefaultCurrency = (await _currencyRateExchangeService.GetExchangeRate(dto.CurrencyCode)) * dto.Amount; } return(new Abp.Application.Services.Dto.ListResultDto <CategoryReportListDto>(output)); }
public async Task <GetTransactionSummaryOutput> GetSummary(GetTransactionSummaryInput input) { var startDate = DateTime.Today.FirstDayOfMonth(); var endDate = startDate.AddMonths(1).AddTicks(-1); var tenantId = AbpSession.TenantId; var output = new GetTransactionSummaryOutput(); var tenantTransactions = await _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Where(t => t.Account.TenantId == tenantId && t.TransactionTime > startDate && t.TransactionTime < endDate && !t.IsTransferred).ToListAsync(); decimal tenantNetWorth = 0; decimal tenantIncome = 0; decimal tenantExpense = 0; decimal userNetWorth = 0; decimal userIncome = 0; decimal userExpense = 0; decimal accountIncome = 0; decimal accountExpense = 0; foreach (var transaction in tenantTransactions) { var currencyConversionRate = await _currencyRateExchangeService.GetExchangeRate(transaction.Account.Currency.Code); if (transaction.Amount > 0) { tenantIncome += transaction.Amount * currencyConversionRate; if (transaction.CreatorUserId == AbpSession.UserId) { userIncome += transaction.Amount * currencyConversionRate; } if (input.AccountId.HasValue && transaction.AccountId == input.AccountId) { accountIncome += transaction.Amount * currencyConversionRate; } } else { tenantExpense += transaction.Amount * currencyConversionRate; if (transaction.CreatorUserId == AbpSession.UserId) { userExpense += transaction.Amount * currencyConversionRate; } if (input.AccountId.HasValue && transaction.AccountId == input.AccountId) { accountExpense += transaction.Amount * currencyConversionRate; } } } output.TenantExpense = tenantExpense; output.TenantIncome = tenantIncome; // expense is -ve output.TenantSaved = tenantIncome + tenantExpense; output.UserExprense = userExpense; output.UserIncome = userIncome; // expense is -ve output.UserSaved = userIncome + userExpense; output.AccountExpense = accountExpense; output.AccountIncome = accountIncome; output.AccountSaved = accountIncome + accountExpense; // net worth calc var tenantAccounts = await _accountRepository.GetAll().Where(a => a.TenantId == tenantId).ToListAsync(); foreach (var account in tenantAccounts) { var lastTransaction = await _transactionRepository.GetAll() .Include(transaction => transaction.Account) .ThenInclude(account => account.Currency) .Where(t => t.AccountId == account.Id) .OrderByDescending(t => t.TransactionTime) .ThenByDescending(t => t.CreationTime).FirstOrDefaultAsync(); if (lastTransaction != null) { decimal currencyConversionRate = await _currencyRateExchangeService.GetExchangeRate(lastTransaction.Account.Currency.Code); var convertedAmount = lastTransaction.Balance * currencyConversionRate; tenantNetWorth += convertedAmount; if (lastTransaction.CreatorUserId == AbpSession.UserId) { userNetWorth += convertedAmount; } } } output.TenantNetWorth = tenantNetWorth; output.UserNetWorth = userNetWorth; output.CurrencySymbol = "₹"; int networthPercentage = 0; int incomePercentage = 0; int expensePercentage = 0; int savedPercentage = 0; if (input.AccountId.HasValue) { // divide by zero case handled if (tenantIncome != 0) { incomePercentage = (int)((accountIncome / tenantIncome) * 100); } if (tenantExpense != 0) { expensePercentage = (int)((accountExpense / tenantExpense) * 100); } if (tenantNetWorth != 0) { networthPercentage = (int)((userNetWorth / tenantNetWorth) * 100); } if (output.TenantSaved != 0) { savedPercentage = (int)((output.AccountSaved / output.TenantSaved) * 100); } } else { if (tenantIncome != 0) { incomePercentage = (int)((userIncome / tenantIncome) * 100); } if (tenantExpense != 0) { expensePercentage = (int)((userExpense / tenantExpense) * 100); } if (tenantNetWorth != 0) { networthPercentage = (int)((userNetWorth / tenantNetWorth) * 100); } if (output.TenantSaved != 0) { savedPercentage = (int)((output.UserSaved / output.TenantSaved) * 100); } } output.NetWorthPercentage = $"{networthPercentage}%"; output.IncomePercentage = $"{incomePercentage}%"; output.ExpensePercentage = $"{expensePercentage}%"; output.SavedPercentage = $"{savedPercentage}%"; output.TotalFamilyTransactionsCount = await _transactionRepository.CountAsync(t => t.Account.TenantId == tenantId); return(output); }