public List<int> getDiasEvento(Evento evento) { List<int> dias = new List<int>(); if (evento.isLunes) { dias.Add(1); } if (evento.isMartes) { dias.Add(2); } if (evento.isMiercoles) { dias.Add(3); } if (evento.isJueves) { dias.Add(4); } if (evento.isViernes) { dias.Add(5); } if (evento.isSabado) { dias.Add(6); } if (evento.isDomingo) { dias.Add(0); } return dias; }
public ActionResult Edit(Evento evento) { String value = Request.Form["opcionCheckbox"]; string dia = Request.Form["diaCheckbox"]; int isCheked = Convert.ToInt32(value); List<Evento> eventosCal = new List<Evento>(); DateTime eventoFechaAnterior = db.Eventoes.AsNoTracking().Where(evt => evt.ID == evento.ID).SingleOrDefault().fechaIncicio; if (ModelState.IsValid) { List<int> diasEvt = getDiasEvento(evento); if (isCheked == 1) { //Si cambia de fecha Calendario calendario = db.Calendarios.AsNoTracking().Where(i => i.ID == evento.CalendarioID).SingleOrDefault(); eventosCal.AddRange(calendario.eventos.Where(ev => ev.ID == evento.ID).ToList()); eventosCal.AddRange(calendario.eventos.Where(ev => ev.ID != evento.ID).Where(f => f.fechaIncicio >= eventoFechaAnterior).OrderBy(f => f.fechaIncicio).ToList()); //Prueba Temporal de Algoritmo de desplazamiento List<DateTime> eventosDeplazados = desplazarEventos(eventosCal, diasEvt, evento.fechaIncicio, 0); int evtIndex = 0; foreach (var evt in eventosCal) { evt.fechaIncicio = Convert.ToDateTime(eventosDeplazados[evtIndex]); evt.fechaFin = evt.fechaIncicio; foreach (var d in diasEvt) { switch(d){ case 0: evt.isDomingo = true; break; case 1: evt.isLunes = true; break; case 2: evt.isMartes = true; break; case 3: evt.isMiercoles = true; break; case 4: evt.isJueves = true; break; case 5: evt.isViernes = true; break; case 6: evt.isSabado = true; break; } } db.Entry(evt).State = EntityState.Modified; evtIndex++; } db.SaveChanges(); // --- Actualiza datos del Calendario --- DateTime dateMin = new DateTime(); DateTime dateMax = new DateTime(); dateMin = db.Eventoes.Where(c => c.CalendarioID == evento.CalendarioID).Min(d => d.fechaIncicio); dateMax = db.Eventoes.Where(c => c.CalendarioID == evento.CalendarioID).Max(d => d.fechaIncicio); calendario.fechaInicio = dateMin; calendario.fechaFin = dateMax; db.Entry(calendario).State = EntityState.Modified; db.SaveChanges(); // ----- End Actualizar Datos del Calendario --- //Para actualizar la fecha de fin del diplomado Diplomado diplomado = db.Diplomadoes.Find(calendario.Grupo.DiplomadoID); 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 } else { evento.fechaFin = evento.fechaIncicio; db.Entry(evento).State = EntityState.Modified; db.SaveChanges(); } return RedirectToAction("Details", "Calendario", new { id = evento.CalendarioID }); } ViewBag.CalendarioID = new SelectList(db.Calendarios, "ID", "nombre", evento.CalendarioID); ViewBag.TallerID = new SelectList(db.Tallers, "ID", "nombre", evento.TallerID); return View(evento); }
public ActionResult EditarTaller(Evento evento) { if (ModelState.IsValid) { evento.fechaFin = evento.fechaIncicio; db.Entry(evento).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Details", "Calendario", new { id = evento.CalendarioID }); } ViewBag.CalendarioID = new SelectList(db.Calendarios, "ID", "nombre", evento.CalendarioID); ViewBag.TallerID = new SelectList(db.Tallers, "ID", "nombre", evento.TallerID); return View(evento); }
public async Task <ActionResult> Create(Evento evento) { List<Evento> eventosCal = new List<Evento>(); if (ModelState.IsValid) { DateTime eventoFechaAnterior = evento.fechaIncicio; evento.fechaFin = evento.fechaIncicio; db.Eventoes.Add(evento); await db.SaveChangesAsync(); db.Entry(evento).State = EntityState.Detached; String value = Request.Form["opcionCheckbox"]; int isCheked = Convert.ToInt32(value); List<int> diasEvt = getDiasEvento(evento); if (isCheked == 1) { //Si cambia de fecha Calendario calendario = await db.Calendarios.AsNoTracking().Where(i => i.ID == evento.CalendarioID).SingleOrDefaultAsync(); eventosCal.AddRange(calendario.eventos.Where(ev => ev.ID != evento.ID).Where(f => f.fechaIncicio >= eventoFechaAnterior).OrderBy(f => f.fechaIncicio).ToList()); //Prueba Temporal de Algoritmo de desplazamiento List<DateTime> eventosDeplazados = desplazarEventos(eventosCal, diasEvt, evento.fechaIncicio, 1); int evtIndex = 0; foreach (var evt in eventosCal) { evt.fechaIncicio = Convert.ToDateTime(eventosDeplazados[evtIndex]); evt.fechaFin = evt.fechaIncicio; db.Entry(evt).State = EntityState.Modified; foreach (var d in diasEvt) { switch (d) { case 0: evt.isDomingo = true; break; case 1: evt.isLunes = true; break; case 2: evt.isMartes = true; break; case 3: evt.isMiercoles = true; break; case 4: evt.isJueves = true; break; case 5: evt.isViernes = true; break; case 6: evt.isSabado = true; break; } } evtIndex++; } db.SaveChanges(); // --- Actualiza datos del Calendario --- DateTime dateMin = new DateTime(); DateTime dateMax = new DateTime(); dateMin = await db.Eventoes.AsNoTracking().Where(c => c.CalendarioID == evento.CalendarioID).MinAsync(d => d.fechaIncicio); dateMax = await db.Eventoes.AsNoTracking().Where(c => c.CalendarioID == evento.CalendarioID).MaxAsync(d => d.fechaIncicio); calendario.fechaInicio = dateMin; calendario.fechaFin = dateMax; try { db.Entry(calendario).State = EntityState.Modified; db.SaveChanges(); } catch(Exception e){ var msj = e.Message; } // ----- End Actualizar Datos del Calendario --- } return RedirectToAction("Details", "Calendario", new { id = evento.CalendarioID }); } ViewBag.CalendarioID = new SelectList(db.Calendarios.Select(x => new { x.ID, x.nombre}), "ID", "nombre", evento.CalendarioID); ViewBag.TallerID = new SelectList(db.Tallers.Select(x => new { x.ID, x.nombre}), "ID", "nombre", evento.TallerID); return View(evento); }
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); }