public AccountHistoryDto GetAccountHistory(long accountId) { using (var context = new CashFlowContext()) { DataAccess.EF.Account efAccount = context.Account .Include(a => a.AccountBalance) .Include(a => a.TransferAccountFrom).ThenInclude(t => t.AccountTo) .Include(a => a.TransferAccountTo).ThenInclude(t => t.AccountFrom) .SingleOrDefault(t => t.Id == accountId); if (efAccount != null) { AccountBalance lastAccountBalance = efAccount.AccountBalance.OrderByDescending(b => b.StartDate).First(); AccountHistoryDto account = AccountHistoryMapper.Map( efAccount, lastAccountBalance, lastAccountBalance.Balance - efAccount.TransferAccountFrom.Sum(t => t.Amount) + efAccount.TransferAccountTo.Sum(t => t.Amount), efAccount.TransferAccountTo.OrderByDescending(t => t.TransferDate), efAccount.TransferAccountFrom.OrderByDescending(t => t.TransferDate)); return(account); } else { return(null); } } }
private ReportAccountBalanceDto CheckAccountHistoryDto(AccountHistoryDto entryToCheck, Guid accountId) { ReportAccountBalanceDto result = new ReportAccountBalanceDto(); if (entryToCheck.SourceAccountId == accountId) { result.AccountId = entryToCheck.SourceAccountId; result.Balance = entryToCheck.SourceBalance; result.DueDate = entryToCheck.DueDateTime; } else { result.AccountId = entryToCheck.DestinationAccounId; result.Balance = entryToCheck.DestinationBalance; result.DueDate = entryToCheck.DueDateTime; } return(result); }
public static AccountHistoryDto Map(Account account, AccountBalance startBalance, decimal currentBalance, IEnumerable <Transfer> incomingTrasnfers, IEnumerable <Transfer> outgoingTransfers) { if (account == null) { return(null); } AccountHistoryDto accountDto = new AccountHistoryDto(); accountDto.Id = account.Id; accountDto.Name = account.Name; accountDto.AccountStartBalance = startBalance.Balance; accountDto.AccountCurrentBalance = currentBalance; foreach (var transfer in incomingTrasnfers) { accountDto.IncomingTransfers.Add(TransferMapper.Map(transfer)); } foreach (var transfer in outgoingTransfers) { accountDto.OutgoingTransfers.Add(TransferMapper.Map(transfer)); } int numberOfDays = (int)Math.Ceiling((DateTime.Now - startBalance.StartDate).TotalDays); DateTime accountBalanceHistoryDate = startBalance.StartDate; decimal historyBalance = startBalance.Balance; for (int i = 0; i < numberOfDays; i++) { historyBalance = historyBalance + incomingTrasnfers.Where(t => t.TransferDate.Date == accountBalanceHistoryDate.Date).Sum(t => t.Amount) - outgoingTransfers.Where(t => t.TransferDate.Date == accountBalanceHistoryDate.Date).Sum(t => t.Amount); accountDto.AccountBalanceHistory.Add(new AccountBalanceHistoryDto { BalanceDate = accountBalanceHistoryDate, Balance = historyBalance }); accountBalanceHistoryDate = accountBalanceHistoryDate.AddDays(1); } return(accountDto); }