public async Task<ActionResult> CalendarioImportar(ImportarCalendarioGrupoVM calendarioVm)
        {

            int grupoDest = calendarioVm.grupoDest;
            int calendarioId = calendarioVm.calendarioId;
            if (grupoDest == 0 || calendarioId == 0)
            {
                ModelState.AddModelError("Error", "Seleccione el grupo o el calendario!");
                return View();
            }
            else {
                Grupo grupo = await db.Grupoes.FindAsync(grupoDest);
                Calendario calendario = await db.Calendarios.FindAsync(calendarioId);
                if (grupo != null)
                {
                    List<Evento> eventos = new List<Evento>();
                    eventos = calendario.eventos.ToList();
                    Calendario calendarioNew = new Calendario();
                    calendarioNew.eventos = new List<Evento>();
                    foreach (var evento in eventos) {
                        calendario.eventos.Add(new Evento {Chofer = evento.Chofer, ChoferID = evento.ChoferID,duracion = evento.duracion, Facilitador = evento.Facilitador,
                                                            FacilitadorID = evento.FacilitadorID, fechaFin = evento.fechaFin, fechaIncicio = evento.fechaIncicio,
                                                            orden = evento.orden, TallerID = evento.TallerID, Taller = evento.Taller,  
                                                            isDomingo= evento.isDomingo, isJueves = evento.isJueves, isLunes = evento.isLunes, isMartes = evento.isMartes, isMiercoles = evento.isMiercoles, isSabado = evento.isSabado, isViernes = evento.isViernes,
                                                            });
                    }

                    calendarioNew.eventos = new List<Evento>();
                    calendarioNew.eventos = eventos;
                    calendarioNew.fechaInicio = eventos.Select(x => new { x.fechaIncicio }).Min(f => f.fechaIncicio);
                    calendarioNew.fechaFin = eventos.Select(x => new { x.fechaIncicio }).Max(f => f.fechaIncicio);
                    calendarioNew.GrupoID = grupoDest;
                    calendarioNew.nombre = calendario.nombre;
                    db.Calendarios.Add(calendarioNew);
                    await db.SaveChangesAsync();
                    return RedirectToAction("Details", "Grupo", new { id = grupoDest, diplomadoID = grupo.DiplomadoID });
                }                

            }        

            return View();
        }
        public async Task <ActionResult> Create(Calendario calendario)
        {


            List<Evento> eventos = new List<Evento>();
            List<Taller> talleres = new List<Taller>();
            Grupo grupo = db.Grupoes.Find(calendario.GrupoID);
            Diplomado diplomado = db.Diplomadoes.Find(grupo.DiplomadoID);


            List<Modulo> modulos = await db.Moduloes.Where(c => c.DiplomadoID == grupo.DiplomadoID).ToListAsync();
            foreach (var m in modulos)
            {
                talleres.AddRange(m.talleres);
            }
            string dia = Request.Form["diaCheckbox"];

            int eventOrder = 0;
            // int weeks = Math.Abs((Int32) (calendario.fechaInicio - calendario.fechaFin).TotalDays / 7); // so es con fecha-inicio -- fecha fin

            int diacount = 1;
            if (dia != null && dia != "")
            {
                diacount = dia.Split(',').Count();
            }
            int weeks = (talleres.Count() / (diacount)) - 1;
            float weeksDays = ((float)(talleres.Count()) / (float)diacount) - 1;
            int daysLeft = (int)((decimal)((weeksDays) % 1) * 10);
            if (daysLeft > 0)
            {
                weeks++;
            }
            if (ModelState.IsValid)
            {
                calendario.fechaFin = calendario.fechaInicio.AddDays(weeks * 7);
                db.Calendarios.Add(calendario);
                db.SaveChanges();
                int k = 0;
                for (k = 0; k <= weeks; k++)
                {
                    if (dia != null && dia != "")
                    {
                        String[] dias = dia.Split(',');
                        foreach (var d in dias)
                        {
                            Evento evento = new Evento();
                            int diaDiferencia = Math.Abs(((int)calendario.fechaInicio.DayOfWeek) - Convert.ToInt32(d));
                            int diaNumber = Convert.ToInt32(d);

                            evento.fechaIncicio = calendario.fechaInicio.AddDays(k * 7 + diaDiferencia);
                            evento.fechaFin = calendario.fechaInicio.AddDays(k * 7 + diaDiferencia);
                            evento.CalendarioID = calendario.ID;
                            evento.orden = eventOrder;
                            eventOrder++;
                            //Agrega automaticamente los talleres a los eventos
                            talleres = talleres.OrderBy(o => o.orden).ToList();
                            try
                            {
                                Taller taller = talleres.Where(o => o.orden == (evento.orden + 1)).SingleOrDefault();
                                int tallerID = taller.ID;
                                if (tallerID != 0)
                                {
                                    evento.TallerID = tallerID;
                                    if (taller.FacilitadorID != 0)
                                    {
                                        evento.FacilitadorID = taller.FacilitadorID;
                                    }
                                    foreach (var diasEvento in dias)
                                    {
                                        int diaEvt = Convert.ToInt32(diasEvento);
                                        switch (diaEvt)
                                        {
                                            case 0:
                                                evento.isDomingo = true;
                                                break;
                                            case 1:
                                                evento.isLunes = true;
                                                break;
                                            case 2:
                                                evento.isMartes = true;
                                                break;
                                            case 3:
                                                evento.isMiercoles = true;
                                                break;
                                            case 4:
                                                evento.isJueves = true;
                                                break;
                                            case 5:
                                                evento.isViernes = true;
                                                break;
                                            case 6:
                                                evento.isSabado = true;
                                                break;
                                        }
                                    }
                                    eventos.Add(evento);
                                }
                            }
                            catch (Exception e)
                            {
                                ModelState.AddModelError("", e.Message);
                            }

                        }
                    }

                }
                db.Eventoes.AddRange(eventos);
                await db.SaveChangesAsync();

                //Para actualizar la fecha de fin del diplomado
                db.Diplomadoes.Attach(diplomado);
                var entry = db.Entry(diplomado);
                bool fechaDipomadoChanged = false;
                if (diplomado.fechaFin < calendario.fechaFin)
                {
                    diplomado.fechaFin = calendario.fechaFin;
                    entry.Property(e => e.fechaFin).IsModified = true;
                    fechaDipomadoChanged = true;
                }
                if (diplomado.fechaInicio > calendario.fechaInicio)
                {
                    diplomado.fechaInicio = calendario.fechaInicio;
                    entry.Property(e => e.fechaInicio).IsModified = true;
                    fechaDipomadoChanged = true;
                }
                if (fechaDipomadoChanged)
                {
                    db.SaveChanges();
                }
                //End Actualiza fechas del diplomado
                return RedirectToAction("Details", "Grupo", new { id = calendario.GrupoID });
            }

            ViewBag.GrupoID = new SelectList(db.Grupoes, "ID", "nombre", calendario.GrupoID);
            return View(calendario);
        }