//[HttpPost]
        public ActionResult Inscribir(int idCharla)
        {
            //lista de charlas en la BD
            var charlas = _dbContext.Charlas.Include(s => s.Sala).Include(s => s.Speaker).ToList();

            if (charlas.Any() && User.Identity.IsAuthenticated)
            {
                try
                {
                    var asistente        = _dbContext.Asistentes.First(a => a.CorreoAsistente == User.Identity.Name);
                    var charlasAsistente = _dbContext.AsistenteCharlas.Where(c => c.IdAsistente == asistente.IdAsistente).Include(s => s.Charla).ToList();
                    var charla           = _dbContext.Charlas.First(c => c.IdCharla == idCharla);

                    //validar que persona no este inscrita ya en la charla
                    if (charlasAsistente.Exists(c => c.IdCharla == idCharla))
                    {
                        ViewBag.Error = "Usted ya se inscribió a la charla \"" + charla.NombreCharla + "\"";
                        return(View("List", charlas));
                    }

                    //validar que asistente aun pueda inscribirse
                    if (!asistente.EsAsistenteVIP && charlasAsistente.Count >= asistente.CantidadMaxCharlas)
                    {
                        ViewBag.Error = "Ya excedió su cantidad máxima de inscripciones.";
                        return(View("List", charlas));
                    }

                    //validar capacidad de charla
                    if (charla.CapacidadRestante == 0)
                    {
                        ViewBag.Error = "La charla \"" + charla.NombreCharla + "\"" + "está completa.";
                        return(View("List", charlas));
                    }

                    //validar conflicto de horarios
                    foreach (var charlaAsistente in charlasAsistente)
                    {
                        if ((
                                (charla.HorarioInicio.CompareTo(charlaAsistente.Charla.HorarioInicio) >= 0)
                                &&
                                (charla.HorarioInicio.CompareTo(charlaAsistente.Charla.HorarioFin) <= 0)
                                )
                            ||
                            (
                                (charla.HorarioFin.CompareTo(charlaAsistente.Charla.HorarioInicio) >= 0)
                                &&
                                (charla.HorarioFin.CompareTo(charlaAsistente.Charla.HorarioFin) <= 0)
                            ))
                        {
                            ViewBag.Error = "Hay un conflicto de horarios con la charla \"" +
                                            charlaAsistente.Charla.NombreCharla + " a la cual usted ya está inscrito.\"";
                            return(View("List", charlas));
                        }
                    }

                    //pasó todas las validaciones, registrar al asistente a la charla
                    var nuevoAsistenteCharla = new AsistenteCharla()
                    {
                        IdCharla    = idCharla,
                        IdAsistente = asistente.IdAsistente
                    };

                    charla.CapacidadRestante = charla.CapacidadRestante - 1;
                    this._tektonRepository.ActualizarCharla(charla);
                    this._tektonRepository.RegistrarAsistenteCharla(nuevoAsistenteCharla);
                    this._tektonRepository.Save();

                    ViewBag.Success = "Se ha registrado con éxito su inscripción a la charla \"" + charla.NombreCharla + "\"";
                    return(View("List", _dbContext.Charlas.Include(s => s.Sala).Include(s => s.Speaker).ToList()));
                }
                catch (Exception ex)
                {
                    ViewBag.Error      = "Ocurrió un error al intentar inscribirse.";
                    ViewBag.ErrorAzure = ex.ToString();
                    return(View("List", charlas));
                }
            }

            return(View("List", charlas));
        }
예제 #2
0
 public void RegistrarAsistenteCharla(AsistenteCharla nuevoAsistenteCharla)
 {
     context.AsistenteCharlas.Add(nuevoAsistenteCharla);
 }