예제 #1
0
        public ActionResult Index()
        {
            int tableroId = -1;
            int clienteId = GetClienteSeleccionado();

            if (clienteId == 0)
            {
                return(PartialView("UsuarioSinClientes"));
            }

            if (!commonRepository.tieneFiltrosAsignados(IdModulo, clienteId))
            {
                return(View("_NoTieneFiltros"));
            }

            FiltrosViewModel model = GetFiltrosAplicadosPorTablero(IdModulo, tableroId);

            if (model.FiltrosFechas.Count > 0)
            {
                model.FiltrosFechas.First().DiaDesde = DateTime.Now.ToString("yyyy-MM-01");
                model.FiltrosFechas.First().DiaHasta = DateTime.Now.ToString("yyyy-MM-dd");
            }

            return(View("UnifiedMap", model));
        }
예제 #2
0
        public ActionResult Index()
        {
            int clienteId = GetClienteSeleccionado();

            if (clienteId == 0)
            {
                return(PartialView("UsuarioSinClientes"));
            }

            int userId = GetUsuarioLogueado();

            userId = usuarioRepository.GetUsuarioPerformance(userId);

            if (!commonRepository.tieneFiltrosAsignados(IdModulo, clienteId))
            {
                return(View("_NoTieneFiltros"));
            }

            int tableroId          = -1;
            FiltrosViewModel model = new FiltrosViewModel();

            model = GetFiltrosAplicadosPorTablero(IdModulo, tableroId);

            return(View(model));
        }
예제 #3
0
        public JsonResult GetFiltrosJson()
        {
            int userId    = GetUsuarioLogueado();
            int ClienteId = GetClienteSeleccionado();
            IEnumerable <Filtro> filtros   = tableroRepository.GetFiltros(0, userId, ClienteId);
            FiltrosViewModel     filtrosVM = new FiltrosViewModel();

            foreach (Filtro f in filtros.Where(m => m.TipoFiltro == TipoFiltro.CheckBox))
            {
                var FiltroVM = new FiltroCheckViewModel();
                foreach (Item i in f.Items)
                {
                    FiltroVM.Items.Add(new ItemViewModel()
                    {
                        IdItem = i.IdItem, TipoItem = i.TipoItem, Selected = i.Selected, Descripcion = i.Descripcion.ToUpper()
                    });
                }
                FiltroVM.Id     = f.Id;
                FiltroVM.Nombre = f.Nombre;
                filtrosVM.FiltrosChecks.Add(FiltroVM);
            }

            foreach (Filtro f in filtros.Where(m => m.TipoFiltro == TipoFiltro.Fecha))
            {
                var FiltroVM = new FiltroFechaViewModel();

                foreach (Item i in f.Anios)
                {
                    FiltroVM.Anios.Add(new ItemDropDownListViewModel()
                    {
                        Value = i.IdItem, Descripcion = i.Descripcion
                    });
                }
                foreach (Item i in f.Meses)
                {
                    FiltroVM.Meses.Add(new ItemDropDownListViewModel()
                    {
                        Value = i.IdItem, Descripcion = i.Descripcion, ParentValue = i.IdParent
                    });
                }
                foreach (Item i in f.Semanas)
                {
                    FiltroVM.Semanas.Add(new ItemDropDownListViewModel()
                    {
                        Value = i.IdItem, Descripcion = i.Descripcion, ParentValue = i.IdParent
                    });
                }
                foreach (Item i in f.Trimestres)
                {
                    FiltroVM.Trimestres.Add(new ItemDropDownListViewModel()
                    {
                        Value = i.IdItem, Descripcion = i.Descripcion, ParentValue = i.IdParent
                    });
                }
                FiltroVM.Id     = f.Id;
                FiltroVM.Nombre = f.Nombre;
                filtrosVM.FiltrosFechas.Add(FiltroVM);
            }
            return(Json(filtrosVM, JsonRequestBehavior.AllowGet));
        }
예제 #4
0
        public IActionResult Listar(FiltrosViewModel filtros)
        {
            var usuarios = new List <Usuario>();

            if (!string.IsNullOrEmpty(filtros.Ativo))
            {
                usuarios = this.usuarioRepository.Listar(x => !string.IsNullOrEmpty(filtros.Nome) ? x.Nome.ToLower().Contains(filtros.Nome.ToLower()) : true &&
                                                         (filtros.Ativo == "1" && x.Ativo ||
                                                          filtros.Ativo == "2" && !x.Ativo));
            }
            else
            {
                usuarios = this.usuarioRepository.Listar(x => !string.IsNullOrEmpty(filtros.Nome) ? x.Nome.ToLower().Contains(filtros.Nome.ToLower()) : true);
            }

            var relatorioViewModel = new RelatorioViewModel
            {
                Usuarios = usuarios.Select(x =>
                {
                    return(new UsuarioViewModel(x));
                }).ToList(),
                Filtros = filtros
            };

            return(View(relatorioViewModel));
        }
예제 #5
0
        // GET: FiltroRelatorio
        public ActionResult Index()
        {
            FiltrosViewModel model = new FiltrosViewModel();

            CategoriaDAO categoriaDAO = new CategoriaDAO();

            //model.Categorias = categoriaDAO.GetAll();

            return(View(model));
        }
예제 #6
0
        public ActionResult Index()
        {
            CategoriaController categoriaController = new CategoriaController();
            ProdutoController   produtoController   = new ProdutoController();
            var model = new FiltrosViewModel
            {
                Categorias = categoriaController.GetCategoria(),
                Produtos   = produtoController.GetProdutos(),
            };

            return(View(model));
        }
예제 #7
0
        public ActionResult IndexRelatorioBaixa()
        {
            BaixaController     baixaController     = new BaixaController();
            ProdutoController   produtoController   = new ProdutoController();
            CategoriaController categoriaController = new CategoriaController();

            var model = new FiltrosViewModel()
            {
                Baixas     = baixaController.GetBaixas(),
                Categorias = categoriaController.GetCategoria(),
                Produtos   = produtoController.GetProdutos(),
            };

            return(View(model));
        }
예제 #8
0
        public ActionResult IndexRelatorioLote()
        {
            LoteController      loteController      = new LoteController();
            ProdutoController   produtoController   = new ProdutoController();
            CategoriaController categoriaController = new CategoriaController();

            var model = new FiltrosViewModel()
            {
                Lotes      = loteController.GetLotes(),
                Categorias = categoriaController.GetCategoria(),
                Produtos   = produtoController.GetProdutos(),
            };

            return(View(model));
        }
예제 #9
0
        protected override void OnModelUpdated(ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext)
        {
            FiltrosViewModel model = bindingContext.Model as FiltrosViewModel;

            foreach (FiltroCheckViewModel fc in model.FiltrosChecks)
            {
                if (fc.Id != null)
                {
                    if (model.FiltrosChecks[model.FiltrosChecks.IndexOf(fc)].Items == null)
                    {
                        model.FiltrosChecks[model.FiltrosChecks.IndexOf(fc)].Items = new System.Collections.Generic.List <ItemViewModel>();
                    }

                    if (model.FiltrosChecks[model.FiltrosChecks.IndexOf(fc)].Items.Count > 0)
                    {
                        model.FiltrosChecks[model.FiltrosChecks.IndexOf(fc)].Items.RemoveAll(i => !i.Selected);
                    }
                }
            }
            //FILTROS NUEVOS
            //Probar algo nuevo, simplificando el request para los filtros
            //HttpRequestBase request = controllerContext.HttpContext.Request;
            ////List<string> filtros = new List<string>();
            //Dictionary<string,string> filtros = new Dictionary<string, string>();
            //StringComparison comparison = StringComparison.InvariantCulture;
            //string idFiltro = "";

            //foreach (string key in request.Form)
            //{
            //    if (key.StartsWith("F.FC", comparison) ==true)
            //    {
            //        //Si se trata de un filtro, empieza con F.FC y temina con .id
            //        if (key.EndsWith(".id", comparison) ==true)
            //        {
            //            idFiltro = key.Substring(key.IndexOf("[") + 1, key.IndexOf("]") - key.IndexOf("[") -1);
            //            filtros.Add(idFiltro, request.Form[key]);
            //        }
            //    }
            //}
        }
예제 #10
0
        public ActionResult RelatorioBaixa(FiltrosViewModel filtro)
        {
            BaixaDAO   baixaDAO     = new BaixaDAO();
            var        listaBaixa   = baixaDAO.GetAll();
            ProdutoDAO produtoDAO   = new ProdutoDAO();
            var        listaProduto = produtoDAO.GetAll();

            //todos
            if (filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from b in listaBaixa
                                  join p in listaProduto
                                  on b.Produto_CodigoProduto equals p.CodigoProduto
                                  where b.Produto_CodigoProduto == filtro.SelectItemProdutoId
                                  select new RelatorioBaixaViewModel
                {
                    NomeProduto     = p.NomeProduto,
                    QuantidadeBaixa = b.QuantidadeBaixa,
                    DataBaixa       = b.DataBaixa,
                };

                return(View(resultQuery.Distinct()));
            }
            else
            {
                var resultQuery = from b in listaBaixa
                                  join p in listaProduto
                                  on b.Produto_CodigoProduto equals p.CodigoProduto
                                  select new RelatorioBaixaViewModel
                {
                    NomeProduto     = p.NomeProduto,
                    QuantidadeBaixa = b.QuantidadeBaixa,
                    DataBaixa       = b.DataBaixa,
                };

                return(View(resultQuery.Distinct()));
            }
        }
예제 #11
0
 public ActionResult AplicarFiltros([ModelBinder(typeof(Reporting.Binders.FiltrosModelBinder))] FiltrosViewModel filtros, int TableroId)
 {
     return(base.AplicarFiltros(filtros, TableroId, IdModulo));
 }
예제 #12
0
 public ActionResult AplicarFiltros([ModelBinder(typeof(Binders.FiltrosModelBinder))] FiltrosViewModel filtros)
 {
     return(AplicarFiltros(filtros, -1, IdModulo));
 }
예제 #13
0
        protected ActionResult AplicarFiltros(FiltrosViewModel filtros, int TableroId, int IdModulo)
        {
            int userId    = GetUsuarioLogueado();
            int clienteId = GetClienteSeleccionado();

            userId = usuarioRepository.GetUsuarioPerformance(userId);

            var filtrostotal = new FiltrosViewModel();

            foreach (var ff in filtros.FiltrosFechas)
            {
                if (ff.DiaDesde != null || ff.DiaHasta != null ||
                    ff.MesDesde != null || ff.MesHasta != null ||
                    ff.SemanaDesde != null || ff.SemanaHasta != null ||
                    ff.TrimestreDesde != null || ff.TrimestreHasta != null)
                {
                    filtrostotal.FiltrosFechas.Add(ff);
                }
            }

            if (IdModulo == 1 || IdModulo == 1)
            {
                var filtrosbloqueados = GetFiltrosBloqueadosObj(TableroId);


                if (filtrosbloqueados != null)
                {
                    foreach (var fb in filtrosbloqueados.FiltrosChecks)
                    {
                        var flt = new FiltroCheckViewModel()
                        {
                            Id     = fb.Id,
                            Nombre = fb.Nombre
                        };

                        foreach (var itm in fb.Items)
                        {
                            flt.Items.Add(new ItemViewModel()
                            {
                                Descripcion = itm.Descripcion,
                                IdItem      = itm.IdItem,
                                isLocked    = itm.isLocked,
                                Selected    = itm.Selected,
                                TipoItem    = itm.TipoItem
                            });
                        }

                        filtrostotal.FiltrosChecks.Add(flt);
                    }
                }
            }

            foreach (var fc in filtros.FiltrosChecks)
            {
                if (fc.Items.Any(i => i.Selected))
                {
                    if (!filtrostotal.FiltrosChecks.Any(f => f.Id == fc.Id))
                    {
                        var newf = new FiltroCheckViewModel()
                        {
                            Id     = fc.Id,
                            Nombre = fc.Nombre
                        };

                        foreach (var itm in fc.Items.Where(fcitm => fcitm.Selected))
                        {
                            newf.Items.Add(itm);
                        }

                        filtrostotal.FiltrosChecks.Add(newf);
                    }
                    else
                    {
                        var fd = filtrostotal.FiltrosChecks.FirstOrDefault(fdd => fdd.Id == fc.Id);

                        if (fd != null)
                        {
                            foreach (var itm in fc.Items)
                            {
                                if (!fd.Items.Any(it => it.IdItem == itm.IdItem))
                                {
                                    fd.Items.Add(itm);
                                }
                            }
                        }
                    }
                }
            }


            var    serializer = new JavaScriptSerializer();
            string json       = new JavaScriptSerializer().Serialize(filtrostotal);

            usuarioRepository.saveFiltros(clienteId, userId, json);

            bool isLocked = false;
            int  tabId    = -1;

            if (IdModulo == 1 || IdModulo == 2)
            {
                tabId    = TableroId;
                isLocked = filtroRepository.IsFiltrosLocked(tabId);
            }

            FiltrosViewModel model = GetFiltrosAplicadosYBloqueados(IdModulo, tabId);

            model.isLocked = isLocked;

            return(PartialView("_Filtros", model));
        }
예제 #14
0
        protected FiltrosViewModel GetFiltrosAplicadosYBloqueados(int IdModulo, int tableroId)
        {
            int userId = GetUsuarioLogueado();

            userId = usuarioRepository.GetUsuarioPerformance(userId);

            int ClienteId = GetClienteSeleccionado();

            //traigo todos los posibles filtros
            Filtros          filtros   = filtroRepository.GetFiltros(userId, ClienteId, IdModulo);
            FiltrosViewModel filtrosVM = new FiltrosViewModel();

            foreach (FiltroCheck f in filtros.FiltrosChecks)
            {
                var FiltroVM = new FiltroCheckViewModel();
                foreach (ItemFiltro i in f.Items)
                {
                    FiltroVM.Items.Add(new ItemViewModel()
                    {
                        IdItem = i.IdItem, TipoItem = i.TipoItem, Selected = i.Selected, Descripcion = i.Descripcion.ToUpper()
                    });
                }
                FiltroVM.Id     = f.Id;
                FiltroVM.Nombre = Reporting.Resources.Filtros.ResourceManager.GetString(string.Format("{0}", f.Id));
                filtrosVM.FiltrosChecks.Add(FiltroVM);
            }

            foreach (FiltroFecha f in filtros.FiltrosFechas)
            {
                var FiltroVM = new FiltroFechaViewModel();
                FiltroVM.Id     = f.Id;
                FiltroVM.Nombre = Reporting.Resources.Filtros.ResourceManager.GetString(string.Format("{0}", f.Id));
                FiltroVM.TipoFechaSeleccionada = "D";
                filtrosVM.FiltrosFechas.Add(FiltroVM);
            }

            List <ReportingFiltroNombreCliente> filtrosConNombre = filtroRepository.getFiltroNombreCliente(ClienteId);

            foreach (ReportingFiltroNombreCliente fnc in filtrosConNombre)
            {
                var filtro = filtrosVM.FiltrosFechas.SingleOrDefault(f => f.Id == fnc.ReportingFiltros.identificador);
                if (filtro != null)
                {
                    filtro.Nombre = fnc.Nombre;
                }
            }
            foreach (ReportingFiltroNombreCliente fnc in filtrosConNombre)
            {
                var filtro = filtrosVM.FiltrosChecks.SingleOrDefault(f => f.Id == fnc.ReportingFiltros.identificador);
                if (filtro != null)
                {
                    filtro.Nombre = fnc.Nombre;
                }
            }

            //Filtros aplicados por el usuario y actualizo dentro de los filtros generales el estado que tienen
            Filtros filtrosSeleccionados = GetFiltrosAplicadosObj(ClienteId, userId);

            if (filtrosSeleccionados != null)
            {
                foreach (FiltroFecha fl in filtrosSeleccionados.FiltrosFechas)
                {
                    var ff = filtrosVM.FiltrosFechas.FirstOrDefault(f => f.Id == fl.Id);
                    if (ff != null)
                    {
                        ff.TipoFechaSeleccionada = fl.TipoFechaSeleccionada;

                        if (fl.DiaDesde != null)
                        {
                            ff.DiaDesde = fl.DiaDesde;
                        }
                        if (fl.DiaHasta != null)
                        {
                            ff.DiaHasta = fl.DiaHasta;
                        }

                        if (fl.MesDesde != null)
                        {
                            ff.MesDesde = fl.MesDesde;
                        }
                        if (fl.MesHasta != null)
                        {
                            ff.MesHasta = fl.MesHasta;
                        }

                        if (fl.SemanaDesde != null)
                        {
                            ff.SemanaDesde = fl.SemanaDesde;
                        }
                        if (fl.SemanaHasta != null)
                        {
                            ff.SemanaHasta = fl.SemanaHasta;
                        }

                        if (fl.TrimestreDesde != null)
                        {
                            ff.TrimestreDesde = fl.TrimestreDesde;
                        }
                        if (fl.TrimestreHasta != null)
                        {
                            ff.TrimestreHasta = fl.TrimestreHasta;
                        }
                    }
                }
                foreach (FiltroCheck fl in filtrosSeleccionados.FiltrosChecks)
                {
                    var fc = filtrosVM.FiltrosChecks.FirstOrDefault(f => f.Id == fl.Id);
                    if (fc != null)
                    {
                        foreach (ItemFiltro s in fl.Items)
                        {
                            var itm = fc.Items.FirstOrDefault(i => i.IdItem == s.IdItem);
                            if (itm != null)
                            {
                                itm.Selected = true;
                            }
                        }
                    }
                }
            }
            //Traigo los filtros bloqueados del usuario, si esta en la estructura de filtros generales lo marco como bloqueado
            if (IdModulo == 1 || IdModulo == 2)
            {
                filtrosVM.permitebloquearfiltros = true;
                Filtros filtrosBloqueados = GetFiltrosBloqueadosObj(tableroId);
                if (filtrosBloqueados != null)
                {
                    filtrosVM.isLocked = true;
                    foreach (FiltroCheck fl in filtrosBloqueados.FiltrosChecks)
                    {
                        var fc = filtrosVM.FiltrosChecks.FirstOrDefault(f => f.Id == fl.Id);
                        if (fc != null)
                        {
                            foreach (ItemFiltro s in fl.Items)
                            {
                                var itm = fc.Items.FirstOrDefault(i => i.IdItem == s.IdItem);
                                if (itm != null)
                                {
                                    itm.Selected = true;
                                    itm.isLocked = true;
                                }
                            }
                        }
                    }
                }
            }

            return(filtrosVM);
        }
예제 #15
0
        public ActionResult RelatorioProduto(FiltrosViewModel filtro)
        {
            CategoriaDAO categoriaDAO = new CategoriaDAO();
            ProdutoDAO   produtoDAO   = new ProdutoDAO();
            LoteDAO      loteDAO      = new LoteDAO();

            var todosLote       = loteDAO.GetAll();
            var todosProdutos   = produtoDAO.GetAll();
            var todasCategorias = categoriaDAO.GetAll();

            if (filtro.SelectItemCategoriaId != null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from p in todosProdutos
                                  join c in todasCategorias
                                  on p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.Categoria_CodigoCategoria == filtro.SelectItemCategoriaId &&
                                  p.CodigoProduto == filtro.SelectItemProdutoId
                                  select new RelatorioProdutoViewModel
                {
                    NomeProduto   = p.NomeProduto,
                    NomeCategoria = c.NomeCategoria,
                    Marca         = p.MarcaProduto,
                };
                return(View(resultQuery.Distinct()));
            }
            else if (filtro.SelectItemCategoriaId == null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from p in todosProdutos
                                  join c in todasCategorias
                                  on p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.CodigoProduto == filtro.SelectItemProdutoId
                                  select new RelatorioProdutoViewModel
                {
                    NomeProduto   = p.NomeProduto,
                    NomeCategoria = c.NomeCategoria,
                    Marca         = p.MarcaProduto,
                };
                return(View(resultQuery.Distinct()));
            }
            else if (filtro.SelectItemCategoriaId != null && filtro.NomeProduto == null)
            {
                var resultQuery = from p in todosProdutos
                                  join c in todasCategorias
                                  on p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.Categoria_CodigoCategoria == filtro.SelectItemCategoriaId
                                  select new RelatorioProdutoViewModel
                {
                    NomeProduto   = p.NomeProduto,
                    NomeCategoria = c.NomeCategoria,
                    Marca         = p.MarcaProduto,
                };
                return(View(resultQuery.Distinct()));
            }
            else if (filtro.SelectItemProdutoId == null && filtro.SelectItemCategoriaId != null)
            {
                var resultQuery = from p in todosProdutos
                                  join c in todasCategorias
                                  on p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.CodigoProduto == filtro.SelectItemProdutoId
                                  select new RelatorioProdutoViewModel
                {
                    NomeProduto   = p.NomeProduto,
                    NomeCategoria = c.NomeCategoria,
                    Marca         = p.MarcaProduto,
                };
                return(View(resultQuery.Distinct()));
            }
            else
            {
                var resultQuery = from p in todosProdutos
                                  join c in todasCategorias
                                  on p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  select new RelatorioProdutoViewModel
                {
                    NomeProduto   = p.NomeProduto,
                    NomeCategoria = c.NomeCategoria,
                    Marca         = p.MarcaProduto,
                };
                return(View(resultQuery.Distinct()));
            }
        }
예제 #16
0
        public ActionResult RelatorioLote(FiltrosViewModel filtro)
        {
            CategoriaDAO categoriaDAO   = new CategoriaDAO();
            var          listaCategoria = categoriaDAO.GetAll();
            LoteDAO      loteDAO        = new LoteDAO();
            var          listaLote      = loteDAO.GetAll();
            ProdutoDAO   produtoDAO     = new ProdutoDAO();
            var          listaProduto   = produtoDAO.GetAll();
            EstoqueDAO   estoqueDao     = new EstoqueDAO();

            //todos
            if (filtro.SelectItemLoteId != null && filtro.SelectItemCategoriaId != null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where l.Produto_CodigoProduto == filtro.SelectItemProdutoId &&
                                  p.CodigoProduto == filtro.SelectItemProdutoId &&
                                  p.Categoria_CodigoCategoria == filtro.SelectItemCategoriaId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
            //seleciona produto e categoria aaaaa
            else if (filtro.SelectItemLoteId == null && filtro.SelectItemCategoriaId != null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.CodigoProduto == filtro.SelectItemProdutoId &&
                                  c.CodigoCategoria == filtro.SelectItemCategoriaId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
            //seleciona produto e lote
            else if (filtro.SelectItemLoteId != null && filtro.SelectItemCategoriaId == null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.CodigoProduto == filtro.SelectItemProdutoId &&
                                  l.CodigoLote == filtro.SelectItemLoteId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
            //lote e categoria
            else if (filtro.SelectItemLoteId != null && filtro.SelectItemCategoriaId != null && filtro.SelectItemProdutoId == null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where l.CodigoLote == filtro.SelectItemLoteId &&
                                  c.CodigoCategoria == filtro.SelectItemCategoriaId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
            //produto
            else if (filtro.SelectItemLoteId == null && filtro.SelectItemCategoriaId == null && filtro.SelectItemProdutoId != null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where p.CodigoProduto == filtro.SelectItemProdutoId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
            //lote
            else if (filtro.SelectItemLoteId != null && filtro.SelectItemCategoriaId == null && filtro.SelectItemProdutoId == null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where l.CodigoLote == filtro.SelectItemLoteId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }

            //categoria
            else if (filtro.SelectItemLoteId == null && filtro.SelectItemCategoriaId != null && filtro.SelectItemProdutoId == null)
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria
                                  where c.CodigoCategoria == filtro.SelectItemCategoriaId
                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }

            else
            {
                var resultQuery = from l in listaLote
                                  join p in listaProduto
                                  on l.Produto_CodigoProduto equals p.CodigoProduto
                                  join c in listaCategoria on
                                  p.Categoria_CodigoCategoria equals c.CodigoCategoria

                                  select new RelatorioLoteViewModel
                {
                    DescricaoLote     = l.DescricaoLote,
                    NomeProduto       = p.NomeProduto,
                    NomeCategoria     = c.NomeCategoria,
                    ValidadeLote      = l.ValidadeLote,
                    QuantidadeProduto = l.QuantidadeProduto,
                    LocalEstoque      = estoqueDao.GetById(l.Estoque_CodigoEstoque).DescricaoEstoque,
                };
                return(View(resultQuery.Distinct()));
            }
        }