public async Task <IEnumerable <Movimento> > GetMovimentoWithItem(FilterMovim filter) { if (!IsFilterValid(filter)) { return(null); } return(await _movimentoRepository.GetMovimentoWithItem(filter)); }
public async Task <IEnumerable <Movimento> > GetMovimentoWithItem(FilterMovim filter) { var item = _db.Set <ItemMovimento>(); var movimento = await DBSet.AsNoTracking() .Include(u => u.Usuario) .Include(f => f.Frota) //.Include(i => i.ItemMovimento).ThenInclude(x => x.ClienteProduto).ThenInclude(x => x.Cliente) //.Include(i => i.ItemMovimento).ThenInclude(x => x.ClienteProduto).ThenInclude(x => x.Produto) .Where(x => x.DataHoraInicial >= filter.DataHoraInicial && x.DataHoraInicial <= filter.DataHoraFinal.AddDays(1)) .ToListAsync(); var cliprod = await _clienteProdutoRepository.GetAllWithInclude(); var itemMovim = await item.AsNoTracking() .GroupBy(x => new { x.ClienteProdutoId, x.MovimentoId }) .Select(g => new { ClienteProdutoId = g.Key.ClienteProdutoId, MovimentoId = g.Key.MovimentoId, Qtd = g.Sum(x => x.Qtd) }).ToListAsync(); movimento.ForEach(x => { var group = itemMovim.Where(i => i.MovimentoId == x.Id); var itemList = new List <ItemMovimento>(); foreach (var item in group) { var rel = cliprod.FirstOrDefault(r => r.Id == item.ClienteProdutoId); var itMv = new ItemMovimento { ClienteProdutoId = item.ClienteProdutoId, ClienteProduto = rel, MovimentoId = item.MovimentoId, Movimento = x, Qtd = item.Qtd }; itemList.Add(itMv); } x.ItemMovimento = itemList; }); return(movimento); }
private bool IsFilterValid(FilterMovim filter) { if (filter.DataHoraInicial == null) { Notify("Data inicial do filtro inválida."); return(false); } if (filter.DataHoraFinal == null) { Notify("Data final do filtro inválida."); return(false); } if (filter.DataHoraFinal < filter.DataHoraInicial) { Notify("Data final do filtro menor que data inicial."); return(false); } return(true); }