public JsonResult ObtenerJornadasFechas([Bind("CampeonatoID, CategoriaID, SerieID, Ronda")] PartidosCarga partidosCarga)
        {
            var jornadasFechasLista = _context.Jornadas.Where(x => x.CampeonatoID == partidosCarga.CampeonatoID &&
                                                              x.CategoriaID == partidosCarga.CategoriaID &&
                                                              x.SerieID == partidosCarga.SerieID &&
                                                              x.Ronda == partidosCarga.Ronda)
                                      .Select(x => new { ID = x.GrupoJornada, Fecha = "Fecha - " + x.GrupoJornada.ToString() })
                                      .Distinct();

            return(Json(jornadasFechasLista));
        }
        public JsonResult ObtenerJornadasFechasPartidos([Bind("CampeonatoID, CategoriaID, SerieID, Ronda")] PartidosCarga partidosCarga, int fecha)
        {
            var jornadasLista = _context.Jornadas.Where(x => x.CampeonatoID == partidosCarga.CampeonatoID &&
                                                        x.CategoriaID == partidosCarga.CategoriaID &&
                                                        x.SerieID == partidosCarga.SerieID &&
                                                        x.Ronda == partidosCarga.Ronda &&
                                                        x.GrupoJornada == fecha)
                                .Select(x => x.ID);
            var jornadasPartidosLista = from j in _context.Jornadas
                                        join el in _context.Equipos on j.EquipoIDLocal equals el.ID
                                        join ev in _context.Equipos on j.EquipoIDVisita equals ev.ID
                                        where jornadasLista.Contains(j.ID)
                                        select new
            {
                j.ID,
                equipos = el.Nombre + " vs " + ev.Nombre
            };

            return(Json(jornadasPartidosLista));
        }
        public JsonResult ObtenerJornadasTablero([Bind("CampeonatoID, CategoriaID, SerieID, Ronda")] PartidosCarga partidosCarga)
        {
            List <Tablero> tablero = _context.Jornadas.Where(x => x.CampeonatoID == partidosCarga.CampeonatoID &&
                                                             x.CategoriaID == partidosCarga.CategoriaID &&
                                                             x.SerieID == partidosCarga.SerieID &&
                                                             x.Ronda == partidosCarga.Ronda)
                                     .Select(x => new Tablero
            {
                EquipoID          = x.EquipoIDLocal,
                Equipo            = "",
                PartidosJugados   = 0,
                PartidosGanados   = 0,
                PartidosEmpatados = 0,
                PartidosPerdidos  = 0,
                GolesAFavor       = 0,
                GolesEnContra     = 0,
                GolesDiferencia   = 0,
                Puntos            = 0,
                Posicion          = 0,
            }).Distinct().ToList();

            var visita = _context.Jornadas.Where(x => x.CampeonatoID == partidosCarga.CampeonatoID &&
                                                 x.CategoriaID == partidosCarga.CategoriaID &&
                                                 x.SerieID == partidosCarga.SerieID &&
                                                 x.Ronda == partidosCarga.Ronda)
                         .Select(x => new Tablero
            {
                EquipoID          = x.EquipoIDVisita,
                Equipo            = "",
                PartidosJugados   = 0,
                PartidosGanados   = 0,
                PartidosEmpatados = 0,
                PartidosPerdidos  = 0,
                GolesAFavor       = 0,
                GolesEnContra     = 0,
                GolesDiferencia   = 0,
                Puntos            = 0,
                Posicion          = 0,
            }).Distinct().ToList();

            tablero.AddRange(visita);
            tablero = tablero.Distinct(new TableroComparer()).ToList();

            //Obtenemos todos los partidos de la ronda
            var partidos = (from j in _context.Jornadas
                            join p in _context.Partidos on j.PartidoID equals p.ID
                            where j.CampeonatoID == partidosCarga.CampeonatoID &&
                            j.CategoriaID == partidosCarga.CategoriaID &&
                            j.SerieID == partidosCarga.SerieID &&
                            j.Ronda == partidosCarga.Ronda &&
                            (p.PartidoEstadoID == 5 || p.PartidoEstadoID == 6 || p.PartidoEstadoID == 7)
                            select new { p.ID, p.PartidoEstadoID, j.EquipoIDLocal, j.EquipoIDVisita }).ToList();

            foreach (var partido in partidos)
            {
                if (partido.PartidoEstadoID == 5 || partido.PartidoEstadoID == 6 || partido.PartidoEstadoID == 7)
                {
                    // Obtenemos el equipo local
                    var local = tablero.FirstOrDefault(x => x.EquipoID == partido.EquipoIDLocal);

                    // Obtenemos el equipo visitante
                    var visitante = tablero.FirstOrDefault(x => x.EquipoID == partido.EquipoIDVisita);

                    // Registramos el partido jugado en el respectivo equipo
                    local.PartidosJugados++;
                    visitante.PartidosJugados++;

                    // Agrgamos los goles que cada equipo realizo
                    local.GolesAFavor     += _context.PartidosJugadores.Where(x => x.PartidoID == partido.ID && x.EquipoID == local.EquipoID).Sum(x => x.Goles);
                    visitante.GolesAFavor += _context.PartidosJugadores.Where(x => x.PartidoID == partido.ID && x.EquipoID == visitante.EquipoID).Sum(x => x.Goles);

                    // Agregamos los goles en contra(los que hizo el equipo contrario)
                    local.GolesEnContra     += _context.PartidosJugadores.Where(x => x.PartidoID == partido.ID && x.EquipoID == visitante.EquipoID).Sum(x => x.Goles);
                    visitante.GolesEnContra += _context.PartidosJugadores.Where(x => x.PartidoID == partido.ID && x.EquipoID == local.EquipoID).Sum(x => x.Goles);

                    // Colocamos la diferiencia de goles
                    local.GolesDiferencia     = local.GolesAFavor - local.GolesEnContra;
                    visitante.GolesDiferencia = visitante.GolesAFavor - visitante.GolesEnContra;

                    switch (partido.PartidoEstadoID)
                    {
                    // Juego Empatado
                    case 5:
                        visitante.PartidosEmpatados++;
                        local.PartidosEmpatados++;
                        local.Puntos     += 1;
                        visitante.Puntos += 1;
                        break;

                    // Gana local
                    case 6:
                        local.PartidosGanados++;
                        visitante.PartidosPerdidos++;
                        local.Puntos += 3;
                        break;

                    // Gana Visitante
                    case 7:
                        visitante.PartidosGanados++;
                        local.PartidosPerdidos++;
                        visitante.Puntos += 3;
                        break;
                    }

                    int indexLocal = tablero.FindIndex(x => x.EquipoID == partido.EquipoIDLocal);
                    tablero[indexLocal] = local;

                    int indexVisitante = tablero.FindIndex(x => x.EquipoID == partido.EquipoIDVisita);
                    tablero[indexVisitante] = visitante;
                }
            }

            //Asignamos la posicion en base a los puntos o por ID y considerando que hayan tenido partidos jugados
            int pos = 1;

            foreach (var equipo in tablero.Where(x => x.PartidosJugados > 0).OrderByDescending(x => x.Puntos).ThenByDescending(x => x.GolesDiferencia))
            {
                equipo.Posicion = pos;
                pos++;
            }

            // Asignamos la posición a los equipos que no hayan jugado en base al ID
            int maxPosicion = tablero.Max(x => x.Posicion);

            maxPosicion = maxPosicion + 1;
            foreach (var equipo in tablero.Where(x => x.Posicion < 1))
            {
                equipo.Posicion = maxPosicion;
                maxPosicion++;
            }

            // Colocamos el nombre la foto
            foreach (var item in tablero)
            {
                item.Equipo = _context.Equipos.Find(item.EquipoID).Nombre;
                item.Foto   = _context.Equipos.Find(item.EquipoID).Foto;
            }

            return(Json(tablero.OrderBy(x => x.Posicion).ToList()));
        }
        public JsonResult ObtenerPartidos(string si1dx, string sort, int page, int rows, [Bind("CampeonatoID, CategoriaID, SerieID, Ronda, Fecha")] PartidosCarga partidosCarga)
        {
            sort = (sort == null) ? "" : sort;
            int pageIndex     = Convert.ToInt32(page) - 1;
            int pageSize      = rows;
            var partidosLista = from j in _context.Jornadas
                                join eLocal in _context.Equipos on j.EquipoIDLocal equals eLocal.ID
                                join eVisita in _context.Equipos on j.EquipoIDVisita equals eVisita.ID
                                join p in _context.Partidos on j.PartidoID equals p.ID
                                where j.CampeonatoID == partidosCarga.CampeonatoID && j.CategoriaID == partidosCarga.CategoriaID &&
                                j.SerieID == partidosCarga.SerieID && j.Ronda == partidosCarga.Ronda && j.GrupoJornada == partidosCarga.Fecha
                                select new
            {
                p.ID,
                p.PartidoEstadoID,
                Partido = eLocal.Nombre + " VS " + eVisita.Nombre,
                p.ArbitroIDCentral,
                p.ArbitroIDLateraDerecho,
                p.ArbitroIDLateralIzquierdo,
                p.VocalEquipoLocal,
                p.VocalEquipoVisitante
            };

            int totalRecords = partidosLista.Count();
            var totalPages   = (int)Math.Ceiling((float)totalRecords / (float)rows);

            if (sort.ToUpper() == "DESC")
            {
                partidosLista = partidosLista.OrderByDescending(t => t.ID);
                partidosLista = partidosLista.Skip(pageIndex * pageSize).Take(pageSize);
            }
            else
            {
                partidosLista = partidosLista.OrderBy(t => t.ID);
                partidosLista = partidosLista.Skip(pageIndex * pageSize).Take(pageSize);
            }
            var jsonData = new
            {
                total = totalPages,
                page,
                records = totalRecords,
                rows    = partidosLista
            };

            return(Json(jsonData));
        }