public ActionResult SearchDoc(string doc)
        {
            if (doc == "")
            {
                Session["Bus"] = null;
                return RedirectToAction("Devolucion", "Ventas");
            }

            List<DevolucionModel> devolucion = new List<DevolucionModel>();
            List<VentasXFuncion> listaRealVxf = new List<VentasXFuncion>();
            List<VentasXFuncion> vxf = null;
            List<CuentaUsuario> usuario = db.CuentaUsuario.Where(u => u.codDoc == doc).ToList();//saco el usuario
            List<Ventas> v = db.Ventas.Where(ven => ven.codDoc == doc && ven.Estado == "Pagado").ToList();
            //saco todas las compras realizadas por dicho usuario que tengan estado Pagado
            if (v != null)
            {
                for (int i = 0; i < v.Count; i++)
                {
                    //hallo la lista de VentasXFuncion de cada venta
                    int codiguito = v[i].codVen;
                    vxf = db.VentasXFuncion.Where(venxf => venxf.codVen == codiguito).ToList();
                    if (vxf != null)
                    {
                        for (int j = 0; j < vxf.Count; j++)
                        {
                            int codiguitoF = vxf[j].codFuncion;
                            int codiguitoV = vxf[j].codVen;
                            //filtro
                            Funcion f = db.Funcion.Find(codiguitoF);
                            Ventas vent = db.Ventas.Find(codiguitoV);
                            if (f.estado != "CANCELADO" && f.estado != "POSTERGADO")
                            {
                                vxf.RemoveAt(j);
                                j--;
                            }
                            //logica de que en caso de postergacion no se permita devolver el dinero
                            if (f.estado == "POSTERGADO")
                            {
                                Eventos ev = db.Eventos.Find(f.codEvento);
                                if (!ev.devolverPostergacion)
                                {
                                    vxf.RemoveAt(j);
                                    j--;
                                }
                                else
                                {//sí se puede devolver
                                    //DateTime fPost = (DateTime)f.fechaPostergado;
                                    if (f.fechaPostergado != null)
                                    {
                                        if (DateTime.Compare((DateTime)vent.fecha, (DateTime)f.fechaPostergado) > 0)
                                        {//se realizo la compra fuera del rango en que se puede devolver
                                            vxf.RemoveAt(j);
                                            j--;
                                        }
                                    }

                                }
                            }

                            /*List<Funcion> f = db.Funcion.Where(fun => fun.codFuncion == codiguitoF &&
                                (fun.estado == "Cancelado" || fun.estado == "Postergado")).ToList();
                            if (f == null) {
                                vxf.RemoveAt(j);
                                j--;
                            }else
                                if (f[0].estado == "POSTERGADO")
                                {
                                    Eventos ev = db.Eventos.Find(f[0].codEvento);
                                    if (!ev.devolverPostergacion) {
                                        vxf.RemoveAt(j);
                                        j--;
                                    }
                                }*/

                            //si el evento asociado a ese VXF no es postergado ni cancelado, lo borro
                        }
                        //la lista que mantendrá absolutamente todos los VXF de todas las ventas
                        listaRealVxf.AddRange(vxf);
                    }
                }
                if (listaRealVxf != null)
                {
                    for (int i = 0; i < listaRealVxf.Count; i++)
                    {
                        int codiguitoV = listaRealVxf[i].codVen;
                        int codiguitoF = listaRealVxf[i].codFuncion;
                        //saco todos los DetallesVentas de todos los VXF
                        List<DetalleVenta> detVen = db.DetalleVenta.Where(dv => dv.codVen == codiguitoV &&
                        dv.codFuncion == codiguitoF && dv.cantEntradas != 0).ToList();
                        //dv.cantEntradas!=0 en caso se haya realizado una devolucion de un dv y no de la v total

                        for (int j = 0; j < detVen.Count; j++)
                        {
                            //se llena la lista de devoluciones por cada detalle de venta
                            DevolucionModel d = new DevolucionModel();
                            d.codDev = detVen[j].codDetalleVenta;
                            d.numDoc = int.Parse(doc);
                            if (usuario.Count == 0)
                                d.nombre = "--";
                            else
                                d.nombre = usuario[0].apellido + ", " + usuario[0].nombre;

                            int codigoFuncion = detVen[j].codFuncion;
                            List<Funcion> funAux = db.Funcion.Where(fu => fu.codFuncion == codigoFuncion).ToList();

                            int codigoEvento = funAux[0].codEvento;
                            List<Eventos> eventosAux = db.Eventos.Where(e => e.codigo == codigoEvento).ToList();

                            d.fecha = (DateTime)funAux[0].fecha;
                            d.hora = (DateTime)funAux[0].horaIni;
                            d.evento = eventosAux[0].nombre;
                            d.cantAsientos = (int)detVen[j].cantEntradas;
                            d.monto = (double)detVen[j].total;
                            d.estado = funAux[0].estado;

                            codigoFuncion = detVen[0].codFuncion;
                            int codigoDetVen = detVen[0].codDetalleVenta;

                            PrecioEvento pe = db.PrecioEvento.Find(detVen[0].codPrecE);
                            ZonaEvento ze = db.ZonaEvento.Find(pe.codZonaEvento);
                            /*
                            List<AsientosXFuncion> axf = db.AsientosXFuncion.Where(a => a.codFuncion == codigoFuncion && a.codDetalleVenta == codigoDetVen).ToList();

                            int codigoAsiento = axf[0].codAsiento;
                            List<Asientos> asientos = db.Asientos.Where(a => a.codAsiento == codigoAsiento).ToList();

                            int codigoZona = asientos[0].codZona;
                            List<ZonaEvento> ze = db.ZonaEvento.Where(z => z.codZona == codigoZona).ToList();

                            d.zona = ze[0].nombre;*/
                            d.zona = ze.nombre;
                            devolucion.Add(d);
                        }
                    }
                }
            }

            if (devolucion != null) Session["BusquedaDev"] = devolucion;
            else Session["BusquedaDev"] = null;
            return RedirectToAction("Devolucion", "Ventas");
            //return View("Devolucion");
        }