public string UpdateSingleParticipacion(int participacionId, int valor, int cola)
        {
            using (var db = new edayRoomEntities())
            {
                Participacion participacion = db.Participacions.SingleOrDefault(p => p.id == participacionId);


                if (participacion != null)
                {
                    var mesa = participacion.Mesa;
                    mesa.participacion   = mesa.participacion == participacion.conteo ? valor : Math.Max(mesa.participacion, valor);
                    participacion.conteo = valor;
                    participacion.cola   = cola;

                    var centro           = mesa.Centro;
                    var mesasActivas     = centro.Mesas1.Where(m => m.participacion != 0).ToArray();
                    var votosRegistrados = mesasActivas.Sum(m => m.participacion);
                    var votantesEnMesa   = mesasActivas.Sum(m => m.votantes);
                    var proyeccionCentro = centro.votantes * votosRegistrados / votantesEnMesa;
                    centro.participacionContada    = votosRegistrados;
                    centro.participacionProyectada = proyeccionCentro;
                }
                db.SaveChanges();
                return(new JavaScriptSerializer().Serialize(""));
            }
        }
        public ActionResult AdminMesa(int idMesa)
        {
            var  db   = new edayRoomEntities();
            Mesa mesa = (from m in db.Mesas
                         where m.id == idMesa
                         select m).Single();
            IOrderedEnumerable <Participacion> participacion = from p in mesa.Participacions
                                                               where p.id_testigo != null
                                                               orderby p.fecha descending
                                                               select p;

            Participacion lastParticipacion = participacion.FirstOrDefault();

            Debug.Assert(lastParticipacion != null, "lastParticipacion != null");
            var contact = new ParticipacionContact
            {
                Centro        = mesa.Centro.Nombre,
                IdMesa        = mesa.id,
                IdTestigo     = mesa.Testigoes.First(t => t.activo).id,
                Mesa          = mesa.numero,
                NombreTestigo = mesa.Testigoes.First(t => t.activo).nombre,
                Numero        = mesa.Testigoes.First(t => t.activo).numero,
                Votantes      = mesa.votantes,
                LastUpdate    = mesa.lastContact,
                LastValue     = mesa.participacion
            };

            ViewData["mesa"]          = mesa;
            ViewData["participacion"] = participacion.ToList();
            ViewData["contact"]       = contact;
            return(View("AdminMesa"));
        }
        public IActionResult GuardarNuevoParticipante(InscripcionDto iForm)
        {
            if (ModelState.IsValid)
            {
                Participacion nuevoParticipante = new Participacion();

                var inscriptos = _context.Participacion.ToList();
                nuevoParticipante.ArqueroNavigation   = _context.Arquero.Find(iForm.ArqueroId);
                nuevoParticipante.CategoriaNavigation = _context.Categoria.Find(iForm.CategoriaID);
                nuevoParticipante.DianaNavigation     = _context.Diana.Find(iForm.DianaId);
                nuevoParticipante.Mosca   = 0;
                nuevoParticipante.Puesto  = 0;
                nuevoParticipante.Puntaje = 0;
                nuevoParticipante.Torneo  = iForm.TorneoId;
                _context.Participacion.Add(nuevoParticipante);
                _context.SaveChanges();

                return(RedirectToAction("Participacion", new { Torneo = iForm.TorneoId }));
            }
            else
            {
                return(View(iForm));
            }
        }
        public string UpdateParticipacion(ParticipacionContact contacto, int valor, int cola = 0)
        {
            var db   = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);

            //Reseteo los timelines
            var oldTimelines =
                (from pt in db.ParticipacionTimelines
                 where
                 pt.activa && pt.id_mesa == contacto.IdMesa
                 select pt);

            foreach (var oldTimeline in oldTimelines)
            {
                oldTimeline.activa = false;
            }

            //Guardar valor en timeline
            var newDate     = contacto.QuickCountActive ? DateTime.Now.AddMinutes(45) : DateTime.Now.AddMinutes(60);
            var newTimeline = new ParticipacionTimeline {
                id_mesa = contacto.IdMesa, fecha = newDate, activa = true
            };

            db.ParticipacionTimelines.AddObject(newTimeline);
            var newParticipacion = new Participacion
            {
                fecha      = DateTime.Now,
                hora       = DateTime.Now.Hour,
                min10      = DateTime.Now.Minute / 10,
                min30      = DateTime.Now.Minute / 30,
                conteo     = valor,
                id_mesa    = contacto.IdMesa,
                id_testigo = contacto.IdTestigo,
                cola       = cola,
                active     = true,
                id_parent  = null,
                id_user    = user.id
            };

            //Guardo los datos a nivel de mesa
            var mesa = db.Mesas.Single(m => m.id == contacto.IdMesa);

            mesa.participacion = valor;
            mesa.lastContact   = DateTime.Now;
            mesa.nextContact   = newDate;
            mesa.abierta       = true;


            //Proyeccion de resutados a centro
            var centro           = mesa.Centro;
            var mesasActivas     = centro.Mesas1.Where(m => m.participacion != 0).ToArray();
            var votosRegistrados = mesasActivas.Sum(m => m.participacion);
            var votantesEnMesa   = mesasActivas.Sum(m => m.votantes);
            var proyeccionCentro = centro.votantes * votosRegistrados / votantesEnMesa;


            centro.lastParticipacionContact = DateTime.Now;
            centro.participacionContada     = votosRegistrados;
            centro.participacionProyectada  = proyeccionCentro;


            //Participacion oldParticipacion = db.Participacions.Single(p => p.id == contacto.LastParticipacionId);
            //oldParticipacion.active = false;

            db.Participacions.AddObject(newParticipacion);

            IQueryable <ParticipacionAlerta> alertas = from a in db.ParticipacionAlertas
                                                       where a.activa && !a.Alerta.blocking &&
                                                       a.id_mesa == contacto.IdMesa
                                                       select a;

            foreach (ParticipacionAlerta a in alertas)
            {
                a.activa = false;
            }

            db.SaveChanges();
            return(new JavaScriptSerializer().Serialize(""));
        }