public static IQueryable<Emprestimo> GetBaseQuery(SBSCEntities db, DevolucaoSearchModel searchModel) { IQueryable<Emprestimo> query = db.Emprestimo.Where(q => q.Status == (int)Enumerations.Emprestimo.StatusEmprestimo.Emprestado); if (!string.IsNullOrEmpty(searchModel.Search)) { var term = searchModel.Search.Trim(); query = from q in query where term.Contains(q.Id.ToString()) // Itens do emprestimo || q.ItensEmprestimo.Any(ie => ie.Livro.Titulo.Contains(term)) || q.ItensEmprestimo.Any(ie => ie.Livro.Genero.Contains(term)) || q.ItensEmprestimo.Any(ie => ie.Livro.Autor.Contains(term)) || q.ItensEmprestimo.Any(ie => ie.Livro.Editora.Contains(term)) || q.ItensEmprestimo.Any(ie => ie.Livro.Local.Contains(term)) // Pessoa || q.Pessoa.Nome.Contains(term) || q.Pessoa.Login.Contains(term) select q; } return query; }
public ActionResult Search(DevolucaoSearchModel searchModel) { if (searchModel == null) searchModel = new DevolucaoSearchModel(); var query = DevolucoesModel.GetBaseQuery(db, searchModel).OrderByDescending(q => q.DtEmprestimo); var queryResult = SearchHelper.ApplyPaging(query, query.Count(), Constantes.GridPageSize, searchModel.Page); searchModel.Page = (searchModel.Page ?? 1); searchModel.CurrentPage = searchModel.Page.Value; searchModel.PageSize = Constantes.GridPageSize; searchModel.TotalPages = Math.Ceiling((double)query.Count() / Constantes.GridPageSize); var currentDate = Genericos.GetDateTimeFromBrazil().Date; var model = new DevolucaoSearchViewModel { SearchModel = searchModel, Termo = searchModel.Search, FoundObjects = query.Count(), Objetos = (from objeto in queryResult.ToList() let pessoa = objeto.Pessoa let livros = objeto.ItensEmprestimo.ToList() let dtDevolucao = objeto.ItensEmprestimo.Select(s => s.DtDevolucao).FirstOrDefault() let situacao = (objeto.Status == (int)Enumerations.Emprestimo.StatusEmprestimo.Emprestado && objeto.DtPrevisaoDevolucao < currentDate ? (int)Enumerations.Devolucao.SituacaoDevolucao.Atrasado : (int)Enumerations.Devolucao.SituacaoDevolucao.NoPrazo) select new DevolucaoViewModel { Id = objeto.Id, PessoaId = pessoa.Id, PessoaText = pessoa.Nome, LivrosText = string.Join("; ", livros.Select(x => x.Livro.Titulo).ToList()), StatusId = (int)objeto.Status, StatusText = EnumsHelper.GetText(typeof(Enumerations.Emprestimo.StatusEmprestimo), (int)objeto.Status), SituacaoId = situacao, SituacaoText = EnumsHelper.GetText(typeof(Enumerations.Devolucao.SituacaoDevolucao), situacao), DtEmprestimo = objeto.DtEmprestimo, DtEmprestimoText = objeto.DtEmprestimo.ToShortDateString(), DtPrevisaoDevolucao = objeto.DtPrevisaoDevolucao, DtPrevisaoDevolucaoText = objeto.DtPrevisaoDevolucao.HasValue ? objeto.DtPrevisaoDevolucao.Value.ToShortDateString() : string.Empty, DtDevolucao = dtDevolucao, DtDevolucaoText = dtDevolucao.ToShortDateString(), DtCadastro = objeto.DtHrCadastro, DtCadastroText = objeto.DtHrCadastro.ToShortDateString(), }).OrderByDescending(ob => ob.SituacaoId).ThenBy(ob => ob.DtPrevisaoDevolucao).ToList() }; ViewBag.SearchWaterMark = "Pesquisar pelos campos: código do empréstimo, nome da pessoa, código do livro, título, gênero, autores, editora, local"; ViewBag.Title = GetModuleNamePlural(); ViewBag.Subtitle = string.Format("Pesquisa de {0}", GetModuleNamePlural()); return View(model); }
public ActionResult EmitirReportEmprestimosAtrasados(DevolucaoSearchModel searchModel) { var currentDate = Genericos.GetDateTimeFromBrazil().Date; var query = DevolucoesModel.GetBaseQuery(db, searchModel).OrderByDescending(q => q.DtEmprestimo); var model = new DevolucaoSearchViewModel { SearchModel = searchModel, Termo = searchModel.Search, FoundObjects = query.Count(), Objetos = (from objeto in query.ToList() let pessoa = objeto.Pessoa let livros = objeto.ItensEmprestimo.ToList() let dtDevolucao = objeto.ItensEmprestimo.Select(s => s.DtDevolucao).FirstOrDefault() let situacao = (objeto.Status == (int)Enumerations.Emprestimo.StatusEmprestimo.Emprestado && objeto.DtPrevisaoDevolucao < currentDate ? (int)Enumerations.Devolucao.SituacaoDevolucao.Atrasado : (int)Enumerations.Devolucao.SituacaoDevolucao.NoPrazo) select new DevolucaoViewModel { Id = objeto.Id, PessoaId = pessoa.Id, PessoaText = pessoa.Nome, LivrosText = string.Join("; ", livros.Select(x => x.Livro.Titulo).ToList()), StatusId = (int)objeto.Status, StatusText = EnumsHelper.GetText(typeof(Enumerations.Emprestimo.StatusEmprestimo), (int)objeto.Status), SituacaoId = situacao, SituacaoText = EnumsHelper.GetText(typeof(Enumerations.Devolucao.SituacaoDevolucao), situacao), DtEmprestimo = objeto.DtEmprestimo, DtEmprestimoText = objeto.DtEmprestimo.ToShortDateString(), DtPrevisaoDevolucao = objeto.DtPrevisaoDevolucao, DtPrevisaoDevolucaoText = objeto.DtPrevisaoDevolucao.HasValue ? objeto.DtPrevisaoDevolucao.Value.ToShortDateString() : string.Empty, DtDevolucao = dtDevolucao, DtDevolucaoText = dtDevolucao.ToShortDateString(), DtCadastro = objeto.DtHrCadastro, DtCadastroText = objeto.DtHrCadastro.ToShortDateString(), }) .Where(q => q.SituacaoId == (int)Enumerations.Devolucao.SituacaoDevolucao.Atrasado) .OrderByDescending(ob => ob.SituacaoId) .ThenBy(ob => ob.DtPrevisaoDevolucao).ToList() }; ViewBag.Title = string.Format("Relatório de {0}", "Empréstimos atrasados"); ViewBag.Subtitle = string.Format(Constantes.GeradoEm_, Genericos.GetDateTimeFromBrazil()); return new ViewAsPdf("EmprestimoAtrasadoSearchResultList", model) { FileName = "RelatorioEmprestimosAtrasados.pdf", PageSize = Size.A4, PageOrientation = Orientation.Landscape, PageMargins = { Top = 1, Left = 1, Right = 1, Bottom = 1 } }; }