public async Task <IActionResult> Get([FromQuery][Required] GetTransactionsRequest request) { var input = new GetTransactionsInput(request.WalletId, request.StartDate, request.EndDate); await _mediator.PublishAsync(input); return(this._presenter.ViewModel); }
/// <summary> /// The get transactions async. /// </summary> /// <param name="input"> /// The input. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task <Abp.Application.Services.Dto.PagedResultDto <TransactionPreviewDto> > GetTransactionsAsync(GetTransactionsInput input) { var output = new Abp.Application.Services.Dto.PagedResultDto <TransactionPreviewDto>(); IQueryable <Transaction> query; var tenantId = AbpSession.TenantId; switch (input.Type) { case "tenant": query = _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Include(t => t.Category) .Where(t => t.Account.TenantId == tenantId); break; case "user": var userId = input.UserId ?? AbpSession.UserId; query = _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Include(t => t.Category) .Where(t => t.CreatorUserId == userId); break; case "account": // TODO : NULL | Account owner tenant validation query = _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Include(t => t.Category) .Where(t => t.AccountId == input.AccountId.Value); break; case "category": query = _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Include(t => t.Category) .Where(t => t.CategoryId == input.CategoryId.Value); break; default: query = _transactionRepository.GetAll() .Include(t => t.Account) .ThenInclude(account => account.Currency) .Include(t => t.Category) .Where(t => t.Account.TenantId == tenantId); break; } // transaction period DateTime startDate; DateTime endDate; if (input.StartDate.HasValue && input.EndDate.HasValue) { startDate = input.StartDate.Value.Date; endDate = input.EndDate.Value.Date.AddDays(1).AddTicks(-1); } else { startDate = DateTime.Today.FirstDayOfMonth(); endDate = startDate.AddMonths(1).AddTicks(-1); } // search if (!string.IsNullOrWhiteSpace(input.Query)) { query = query.Where(t => t.Description.Contains(input.Query)); } var transactions = await query.Include(c => c.CreatorUser) .Where(t => t.TransactionTime >= startDate && t.TransactionTime <= endDate) .OrderByDescending(t => t.TransactionTime) .ThenByDescending(t => t.CreationTime) .ToListAsync(); output.Items = (await _currencyRateExchangeService.GetTransactionsWithAmountInDefaultCurrency(transactions)).ToList(); return(output); }