public ActionResult DevolverTodo()
        {
            DetalleVenta dv = (DetalleVenta)Session["DetalleVenta"];
            int salvaCantidad;
            Ventas v = db.Ventas.Find(dv.codVen);
            //Ventas v = (Ventas)Session["VentasDev"];
            v.cantAsientos -= (int)dv.cantEntradas;
            v.MontoTotalSoles -= (double)dv.total;

            v.montoDev += (double)dv.total;
            v.entradasDev += (int)dv.cantEntradas;

            if (v.cantAsientos == 0) v.Estado = "Devuelto";

            Funcion f = db.Funcion.Find(dv.codFuncion);
            Eventos ev = db.Eventos.Find(f.codEvento);
            //Eventos ev = (Eventos)Session["EventoDev"];
            ev.monto_adeudado =ev.monto_adeudado - (double)dv.total + dv.montoDev;

            CuentaUsuario cu = db.CuentaUsuario.Find(v.cliente);
            cu.puntos -= (int)ev.puntosAlCliente * (int)dv.cantEntradas;

            List<AsientosXFuncion> axf = db.AsientosXFuncion.Where(a => a.codFuncion == f.codFuncion && a.codDetalleVenta == dv.codDetalleVenta).ToList();
            //List<AsientosXFuncion> axf = (List<AsientosXFuncion>)Session["ListaAsientos"];
            for (int i = 0; i < axf.Count; i++)
                axf[i].estado = "libre";

            VentasXFuncion vxf = (db.VentasXFuncion.Where(ven => ven.codVen == v.codVen && ven.codFuncion == f.codFuncion).ToList())[0];
            //VentasXFuncion vxf = (VentasXFuncion)Session["VentaXFunDev"];
            vxf.cantEntradas -= (int)dv.cantEntradas;

            vxf.montoDev += (double)dv.total;
            vxf.entradasDev += (int)dv.cantEntradas;

            PrecioEvento pe = db.PrecioEvento.Find(dv.codPrecE);
            ZonaEvento ze = db.ZonaEvento.Find(pe.codZonaEvento);
            if (!ze.tieneAsientos) ze.tieneAsientos = true;

            ZonaxFuncion zxf = (db.ZonaxFuncion.Where(z => z.codFuncion == dv.codFuncion && z.codZona == ze.codZona).ToList())[0];
            zxf.cantLibres += (int)dv.cantEntradas;

            DetalleVenta dvAux = db.DetalleVenta.Find(dv.codDetalleVenta);
            dvAux.entradasDev = dvAux.cantEntradas;
            salvaCantidad = (int)dvAux.cantEntradas;
            dvAux.cantEntradas = 0;

            dvAux.montoDev += (double)dv.total;

            /*Session["DetalleVenta"]
            Session["VentaXFunDev"]
            Session["VentasDev"]
            Session["ListaAsientos"] = axf;
            Session["BusquedaDev"] = devolucionModel
            Session["FuncionDev"]
            Session["EventoDev"]
            */

            //elimina de la lista de busqueda!
            List<DevolucionModel> dev = (List<DevolucionModel>)Session["BusquedaDev"];
            for (int i = 0; i < dev.Count; i++)
                if (dev[i].codDev == dv.codDetalleVenta)
                    dev.RemoveAt(i);
            Session["BusquedaDev"] = dev;

            LogDevoluciones ld = new LogDevoluciones();
            //ld.codLog=;
            ld.codDetalleVenta = dvAux.codDetalleVenta;
            ld.codVendedor = User.Identity.Name;
            ld.cantEntradas = salvaCantidad;
            ld.fechaDev = DateTime.Now;
            ld.montoDev = dv.total;
            db.LogDevoluciones.Add(ld);

            db.SaveChanges();
            return View("Devolucion");
        }
        public ActionResult devolverParcial(string asiento)
        {
            List<AsientosXFuncion> axf = (List<AsientosXFuncion>)Session["ListaAsientos"];
            DetalleVenta dv = (DetalleVenta)Session["DetalleVenta"];
            if (axf.Count != 0) //numerado
            {
                int codAsiento = int.Parse(asiento);
                //DetalleVenta dv = (DetalleVenta)Session["DetalleVenta"];
                AsientosXFuncion axfuncion = db.AsientosXFuncion.Where(a => a.codAsiento == codAsiento && a.codFuncion == dv.codFuncion).First();
                //AsientosXFuncion axfuncion = db.AsientosXFuncion.Find(codAsiento);
                Ventas v = db.Ventas.Find(dv.codVen);
                //Ventas v = (Ventas)Session["VentasDev"];
                v.cantAsientos -= 1;
                v.MontoTotalSoles -= (double)axfuncion.PrecioPagado;

                v.entradasDev += 1;
                v.montoDev += (double)axfuncion.PrecioPagado;

                if (v.cantAsientos == 0) v.Estado = "Devuelto";
                //v.Estado = "DevueltoParcial"; por evaluar!!!!!!!

                Funcion f = db.Funcion.Find(dv.codFuncion);
                Eventos ev = db.Eventos.Find(f.codEvento);
                //Eventos ev = (Eventos)Session["EventoDev"];
                ev.monto_adeudado -= (double)axfuncion.PrecioPagado;

                CuentaUsuario cu = db.CuentaUsuario.Find(v.cliente);
                cu.puntos -= (int)ev.puntosAlCliente;

                //List<AsientosXFuncion> axf = db.AsientosXFuncion.Where(a => a.codFuncion == f.codFuncion && a.codDetalleVenta == dv.codDetalleVenta).ToList();
                //List<AsientosXFuncion> axf = (List<AsientosXFuncion>)Session["ListaAsientos"];
                //for (int i = 0; i < axf.Count; i++)
                //    axf[i].estado = "libre";
                axfuncion.estado = "libre";

                VentasXFuncion vxf = (db.VentasXFuncion.Where(ven => ven.codVen == v.codVen && ven.codFuncion == f.codFuncion).ToList())[0];
                //VentasXFuncion vxf = (VentasXFuncion)Session["VentaXFunDev"];
                vxf.cantEntradas -= 1;

                vxf.montoDev += (double)axfuncion.PrecioPagado;
                vxf.entradasDev += 1;

                PrecioEvento pe = db.PrecioEvento.Find(dv.codPrecE);
                ZonaEvento ze = db.ZonaEvento.Find(pe.codZonaEvento);
                if (!ze.tieneAsientos) ze.tieneAsientos = true;

                ZonaxFuncion zxf = (db.ZonaxFuncion.Where(z => z.codFuncion == dv.codFuncion && z.codZona == ze.codZona).ToList())[0];
                zxf.cantLibres += 1;

                DetalleVenta dvAux = db.DetalleVenta.Find(dv.codDetalleVenta);
                dvAux.entradasDev += 1;
                dvAux.cantEntradas -= 1;

                dvAux.montoDev += (double)axfuncion.PrecioPagado;

                /*Session["DetalleVenta"]
                Session["VentaXFunDev"]
                Session["VentasDev"]
                Session["ListaAsientos"] = axf;
                Session["BusquedaDev"] = devolucionModel
                Session["FuncionDev"]
                Session["EventoDev"]
                */

                //elimina de la lista de busqueda!

                //List<DevolucionModel> dev = (List<DevolucionModel>)Session["BusquedaDev"];
                for (int i = 0; i < axf.Count; i++)
                    if (axf[i].codAsiento == codAsiento)
                    {
                        axf.RemoveAt(i);
                        break;
                    }
                Session["ListaAsientos"] = axf;
                LogDevoluciones ld = new LogDevoluciones();
                ld.codDetalleVenta = dv.codDetalleVenta;
                ld.codVendedor = User.Identity.Name;
                ld.cantEntradas = 1;
                ld.fechaDev = DateTime.Now;
                ld.montoDev = axfuncion.PrecioPagado;
                db.LogDevoluciones.Add(ld);

            }
            else // no numerado
            {
                //AsientosXFuncion axfuncion = db.AsientosXFuncion.Find(codAsiento);
                PrecioEvento pe = db.PrecioEvento.Find(dv.codPrecE);
                Ventas v = db.Ventas.Find(dv.codVen);
                //Ventas v = (Ventas)Session["VentasDev"];
                v.cantAsientos -= 1;
                v.MontoTotalSoles -= (double)pe.precio;
                if (v.cantAsientos == 0) v.Estado = "Devuelto";
                //v.Estado = "DevueltoParcial"; por evaluar!!!!!!!

                v.entradasDev += 1;
                v.montoDev += (double)pe.precio;

                Funcion f = db.Funcion.Find(dv.codFuncion);
                Eventos ev = db.Eventos.Find(f.codEvento);
                //Eventos ev = (Eventos)Session["EventoDev"];
                ev.monto_adeudado -= (double)pe.precio;

                CuentaUsuario cu = db.CuentaUsuario.Find(v.cliente);
                cu.puntos -= (int)ev.puntosAlCliente;

                //List<AsientosXFuncion> axf = db.AsientosXFuncion.Where(a => a.codFuncion == f.codFuncion && a.codDetalleVenta == dv.codDetalleVenta).ToList();
                //List<AsientosXFuncion> axf = (List<AsientosXFuncion>)Session["ListaAsientos"];
                //for (int i = 0; i < axf.Count; i++)
                //    axf[i].estado = "libre";
                //axfuncion.estado = "libre";

                VentasXFuncion vxf = (db.VentasXFuncion.Where(ven => ven.codVen == v.codVen && ven.codFuncion == f.codFuncion).ToList())[0];
                //VentasXFuncion vxf = (VentasXFuncion)Session["VentaXFunDev"];
                vxf.cantEntradas -= 1;

                vxf.montoDev += (double)pe.precio;
                vxf.entradasDev += 1;

                ZonaEvento ze = db.ZonaEvento.Find(pe.codZonaEvento);
                if (!ze.tieneAsientos) ze.tieneAsientos = true;

                ZonaxFuncion zxf = (db.ZonaxFuncion.Where(z => z.codFuncion == dv.codFuncion && z.codZona == ze.codZona).ToList())[0];
                zxf.cantLibres += 1;

                DetalleVenta dvAux = db.DetalleVenta.Find(dv.codDetalleVenta);
                dvAux.entradasDev += 1;
                dvAux.cantEntradas -= 1;

                dvAux.montoDev += (double)pe.precio;

                LogDevoluciones ld = new LogDevoluciones();
                ld.codDetalleVenta = dv.codDetalleVenta;
                ld.codVendedor = User.Identity.Name;
                ld.cantEntradas = 1;
                ld.fechaDev = DateTime.Now;
                ld.montoDev = pe.precio;
                db.LogDevoluciones.Add(ld);

                /*Session["DetalleVenta"]
                Session["VentaXFunDev"]
                Session["VentasDev"]
                Session["ListaAsientos"] = axf;
                Session["BusquedaDev"] = devolucionModel
                Session["FuncionDev"]
                Session["EventoDev"]
                */

                /*
                List<DevolucionModel> dev = (List<DevolucionModel>)Session["BusquedaDev"];
                for (int i = 0; i < dev.Count; i++)
                    if (dev[i].codDev == dv.codDetalleVenta)
                        dev.RemoveAt(i);
                Session["BusquedaDev"] = dev;*/
            }
            /*Session["DetalleVenta"]
            Session["VentaXFunDev"]
            Session["VentasDev"]
            Session["ListaAsientos"] = axf;
            Session["BusquedaDev"] = devolucionModel
            Session["FuncionDev"]
            Session["EventoDev"]
            Session["ZonaEventoDev"]
            Session["AsientosDev"]*/

            List<DevolucionModel> devolMod = (List<DevolucionModel>)Session["BusquedaDev"];
            int j;
            for (j = 0; j < devolMod.Count; j++)
            {
                if (devolMod[j].codDev == dv.codDetalleVenta) break;
            }
            devolMod[j].cantAsientos -= 1;
            Session["BusquedaDev"] = devolMod;

            db.SaveChanges();
            return View("VerDetalle");
        }