public GenericResponse <IngresosResponse> ObtenerIngresosFilterPaginado(int pageIndex, int pageSize, string nroSeguimiento, int tipoProducto, string sector, int proveedor, string destinatario, string fechaDesde, string fechaHasta, string canalizacion, string estado, string autorizado, string prefiltro)
        {
            GenericResponse <IngresosResponse> response = new GenericResponse <IngresosResponse>();

            response.Code = 200;

            try
            {
                Database db = new Database();
                response.Result = new IngresosResponse();


                if (string.IsNullOrEmpty(prefiltro) && String.IsNullOrEmpty(nroSeguimiento) && tipoProducto == 0 && String.IsNullOrEmpty(sector) && proveedor == 0 && String.IsNullOrEmpty(destinatario) && String.IsNullOrEmpty(fechaDesde) && String.IsNullOrEmpty(fechaHasta) && String.IsNullOrEmpty(estado) && String.IsNullOrEmpty(canalizacion) && String.IsNullOrEmpty(autorizado))
                {
                    var pedidosTodos = db.Pedidos.OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidosTodos.ToList());
                    response.Result.totalCount    = pedidosTodos.TotalItemCount.ToString();
                }
                else
                {
                    if (nroSeguimiento == null)
                    {
                        nroSeguimiento = "";
                    }

                    var query = db.Pedidos.AsQueryable();

                    if (!string.IsNullOrEmpty(nroSeguimiento))
                    {
                        query = query.Where(w => w.NroSeguimiento.Contains(nroSeguimiento));
                    }

                    query = query.OrderByDescending(o => o.FechaImposicion);

                    //var query = from b in db.Pedidos
                    //            orderby b.FechaImposicion descending
                    //            where b.NroSeguimiento.Contains(nroSeguimiento) || string.IsNullOrEmpty(b.NroSeguimiento)
                    //            select b;

                    if (tipoProducto != 0)
                    {
                        query = from b in query where b.TipoDeProductos.Id == tipoProducto select b;
                    }

                    if (!String.IsNullOrEmpty(sector))
                    {
                        query = from b in query where b.Sectores.Id == sector select b;
                    }

                    if (proveedor != 0)
                    {
                        query = from b in query where b.Proveedores.Id == proveedor select b;
                    }

                    if (!String.IsNullOrEmpty(destinatario))
                    {
                        query = from b in query where b.Destinatarios.Id == destinatario select b;
                    }

                    if (!String.IsNullOrEmpty(canalizacion))
                    {
                        query = from b in query where b.IdCanalizacion == canalizacion select b;
                    }

                    if (!String.IsNullOrEmpty(autorizado))
                    {
                        query = from b in query where b.AutorizadoRetirar.Contains(autorizado) select b;
                    }

                    if (!String.IsNullOrEmpty(estado))
                    {
                        //int idEstado = int.Parse(estado);
                        List <int> idEstados = estado.Split(',').ToList().ConvertAll(int.Parse);
                        //var idEstados = new List<int>() { 1, 3 };
                        query = from b in query where idEstados.Contains(b.Estado) select b;
                    }

                    if (!string.IsNullOrWhiteSpace(fechaDesde))
                    {
                        CultureInfo esAR = new CultureInfo("es-AR");
                        DateTime    fechaSeleccioandaDesde = DateTime.ParseExact(fechaDesde + " 00:00", "dd/MM/yyyy HH:mm", esAR);
                        query = query.Where(w => w.FechaImposicion.Value > fechaSeleccioandaDesde);
                    }


                    if (!string.IsNullOrWhiteSpace(fechaHasta))
                    {
                        CultureInfo esAR = new CultureInfo("es-AR");
                        DateTime    fechaSeleccioandaHasta = DateTime.ParseExact(fechaHasta + " 23:59", "dd/MM/yyyy HH:mm", esAR);
                        query = query.Where(w => w.FechaImposicion.Value < fechaSeleccioandaHasta);
                    }


                    if (!string.IsNullOrEmpty(prefiltro))
                    {
                        switch (prefiltro)
                        {
                        case "ingresos":
                        {
                            var pedidosList = query.Where(x => x.Estado == Constants.Pedidos.ID_INGRESADO).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                            response.Result.ListaIngresos = IngresosResponse.MapList(pedidosList.ToList());
                            response.Result.totalCount    = pedidosList.TotalItemCount.ToString();
                            response.Result.Prefiltros    = new Prefiltrado()
                            {
                                EstadoPrefiltradoIngresos = EstadosResponse.Map(db.Estados.Where(x => x.Id == 1).FirstOrDefault()), Seleccionado = "ingresos"
                            };
                            break;
                        }

                        case "egresos":
                        {
                            var pedidosList = query.Where(x => x.Estado == Constants.Pedidos.ID_RETIRADO).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                            response.Result.ListaIngresos = IngresosResponse.MapList(pedidosList.ToList());
                            response.Result.totalCount    = pedidosList.TotalItemCount.ToString();
                            response.Result.Prefiltros    = new Prefiltrado()
                            {
                                EstadoPrefiltradoEgresos = EstadosResponse.Map(db.Estados.Where(x => x.Id == 4).FirstOrDefault()), Seleccionado = "egresos"
                            };
                            break;
                        }

                        case "correspondencia":
                        {
                            var pedidosList = query.Where(x => x.Canalizaciones.Id == "1").OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                            response.Result.ListaIngresos = IngresosResponse.MapList(pedidosList.ToList());
                            response.Result.totalCount    = pedidosList.TotalItemCount.ToString();
                            response.Result.Prefiltros    = new Prefiltrado()
                            {
                                CanalizacionesPrefiltradoCorrespondencia = CanalizacionesResponse.Map(db.Canalizaciones.Where(x => x.Id == "1").FirstOrDefault()), Seleccionado = "correspondencia"
                            };
                            break;
                        }

                        case "paquetes":
                        {
                            var pedidosList = query.Where(x => x.IdTipoDeProducto == 2).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                            response.Result.ListaIngresos = IngresosResponse.MapList(pedidosList.ToList());
                            response.Result.totalCount    = pedidosList.TotalItemCount.ToString();
                            response.Result.Prefiltros    = new Prefiltrado()
                            {
                                TipoProductoPrefiltradoPaquetes = TiposProductoResponse.Map(db.TipoDeProductos.Where(x => x.Id == 2).FirstOrDefault()), Seleccionado = "paquetes"
                            };
                            break;
                        }
                        }
                        return(response);
                    }


                    var pedidos = query.ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidos.ToList());
                    response.Result.totalCount    = pedidos.TotalItemCount.ToString();
                }

                return(response);
            }
            catch (Exception ex)
            {
                response.Code  = 500;
                response.Error = "Error al traer los pedidos";

                var message      = ex.Message;
                var messageInner = ex.InnerException != null ? ex.InnerException.Message : "";

                Database db2 = new Database();
                db2.Log.Add(new Log()
                {
                    Fecha = DateTime.Now, Ubicacion = Constants.LOG_UBICACION_RECEPCION, Mensaje = message, Detalle = messageInner
                });

                db2.SaveChanges();
            }

            return(response);
        }
        public GenericResponse <IngresosResponse> ObtenerIngresosPrefiltrado(string prefiltro, int pageIndex, int pageSize)
        {
            GenericResponse <IngresosResponse> response = new GenericResponse <IngresosResponse>();

            response.Code = 200;

            try
            {
                Database db = new Database();
                response.Result = new IngresosResponse();

                switch (prefiltro)
                {
                case "ingresos":
                {
                    var pedidos = db.Pedidos.Where(x => x.Estado == Constants.Pedidos.ID_INGRESADO).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidos.ToList());
                    response.Result.totalCount    = pedidos.TotalItemCount.ToString();
                    response.Result.Prefiltros    = new Prefiltrado()
                    {
                        EstadoPrefiltradoIngresos = EstadosResponse.Map(db.Estados.Where(x => x.Id == 1).FirstOrDefault()), Seleccionado = "ingresos"
                    };
                    break;
                }

                case "egresos":
                {
                    var pedidos = db.Pedidos.Where(x => x.Estado == Constants.Pedidos.ID_RETIRADO).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidos.ToList());
                    response.Result.totalCount    = pedidos.TotalItemCount.ToString();
                    response.Result.Prefiltros    = new Prefiltrado()
                    {
                        EstadoPrefiltradoEgresos = EstadosResponse.Map(db.Estados.Where(x => x.Id == 4).FirstOrDefault()), Seleccionado = "egresos"
                    };
                    break;
                }

                case "correspondencia":
                {
                    var pedidos = db.Pedidos.Where(x => x.Canalizaciones.Id == "1").OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidos.ToList());
                    response.Result.totalCount    = pedidos.TotalItemCount.ToString();
                    response.Result.Prefiltros    = new Prefiltrado()
                    {
                        CanalizacionesPrefiltradoCorrespondencia = CanalizacionesResponse.Map(db.Canalizaciones.Where(x => x.Id == "1").FirstOrDefault()), Seleccionado = "correspondencia"
                    };
                    break;
                }

                case "paquetes":
                {
                    var pedidos = db.Pedidos.Where(x => x.IdTipoDeProducto == 2).OrderByDescending(x => x.FechaImposicion).ToPagedList(pageIndex - 1, pageSize);
                    response.Result.ListaIngresos = IngresosResponse.MapList(pedidos.ToList());
                    response.Result.totalCount    = pedidos.TotalItemCount.ToString();
                    response.Result.Prefiltros    = new Prefiltrado()
                    {
                        TipoProductoPrefiltradoPaquetes = TiposProductoResponse.Map(db.TipoDeProductos.Where(x => x.Id == 2).FirstOrDefault()), Seleccionado = "paquetes"
                    };
                    break;
                }
                }

                return(response);
            }
            catch (Exception ex)
            {
                response.Code  = 500;
                response.Error = "Error al traer los ingresos";

                var message      = ex.Message;
                var messageInner = ex.InnerException != null ? ex.InnerException.Message : "";

                Database db2 = new Database();
                db2.Log.Add(new Log()
                {
                    Fecha = DateTime.Now, Ubicacion = Constants.LOG_UBICACION_RECEPCION, Mensaje = message, Detalle = messageInner
                });

                db2.SaveChanges();
            }

            return(response);
        }