Пример #1
0
        /*Llena las listas de artistas no asignados a la canción (en ListaArtistas)
         * y artistas asignados a la canción (en ListaArtistasCancion)*/
        private void LlenaListaArtistas(CancionCreateEditVM cancionVM)
        {
            List <Artista> listaArtistas, artistasCancion;

            //canción nueva: todos los artistas en no asignados, ningún artista en asignados
            if (cancionVM.Cancion == null || cancionVM.Cancion.Artistas.Count == 0)
            {
                listaArtistas   = db.Artistas.OrderBy(a => a.Nombre).ToList();
                artistasCancion = new List <Artista>();
            }
            else
            {
                //canción existente: todos los artistas en la lista de no asignados, excepto los asignados;
                //los artistas de la canción en la lista de asignados
                listaArtistas   = db.Artistas.AsEnumerable().Except(cancionVM.Cancion.Artistas).ToList();
                artistasCancion = cancionVM.Cancion.Artistas.ToList();
            }

            //creación de las listas compatibles con el campo select de HTML
            cancionVM.ListaArtistas = listaArtistas.Select(a => new SelectListItem
            {
                Text  = a.Nombre,
                Value = a.ArtistaID.ToString()
            });

            cancionVM.ListaArtistasCancion = artistasCancion.Select(a => new SelectListItem
            {
                Text  = a.Nombre,
                Value = a.ArtistaID.ToString()
            });
        }
Пример #2
0
        // GET: Canciones/Create
        public ActionResult Create()
        {
            CancionCreateEditVM cancion = new CancionCreateEditVM();

            // una nueva canción con la lista de artistas para seleccionar
            LlenaListaArtistas(cancion);
            return(View(cancion));
        }
Пример #3
0
        public ActionResult Create([Bind(Include = "Cancion,ArtistasSeleccionados")] CancionCreateEditVM cancionVM)
        {
            TICaseFormat = new CultureInfo("es-MX", false).TextInfo;
            try
            {
                if (ModelState.IsValid)
                {
                    //la canción debe contener al menos un artista
                    if (cancionVM.ArtistasSeleccionados.Count == 0)
                    {
                        ModelState.AddModelError("", "Selecciona el artista de la canción.");
                    }
                    if (ModelState.IsValid)
                    {
                        //asignamos los artistas a la canción obteniéndolos de la lista de ids de artistas seleccionados
                        cancionVM.ArtistasSeleccionados.ToList().ForEach(a => cancionVM.Cancion.Artistas.Add(
                                                                             db.Artistas.Find(a)
                                                                             ));

                        //validación de canción duplicada en la BD
                        if (!db.Canciones.AsEnumerable().Any(s => s.Nombre.ToLower() == cancionVM.Cancion.Nombre.Trim().ToLower() &&
                                                             s.Artistas.Count == cancionVM.ArtistasSeleccionados.Count &&
                                                             !s.Artistas.Except(cancionVM.Cancion.Artistas, new Models.ComparadorArtista())
                                                             .Any()))
                        {
                            cancionVM.Cancion.Nombre = TICaseFormat.ToTitleCase(cancionVM.Cancion.Nombre.Trim());

                            db.Canciones.Add(cancionVM.Cancion);
                            db.SaveChanges();
                            return(RedirectToAction("Index"));
                        }
                        else
                        {
                            ModelState.AddModelError("", "La canción ya está registrada en la base de datos.");
                        }
                    }
                }
            }
            catch (RetryLimitExceededException)
            {
                ModelState.AddModelError("", "No se agregó el registro. Demasiados intentos.");
            }
            catch (Exception e)
            {
                ModelState.AddModelError("", "Ocurrió un error al agregar la canción: \n" + e.Message);
            }

            LlenaListaArtistas(cancionVM);
            return(View(cancionVM));
        }
Пример #4
0
        // GET: Canciones/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Cancion cancion = db.Canciones.Find(id);

            if (cancion == null)
            {
                return(HttpNotFound());
            }
            CancionCreateEditVM cancionEdit = new CancionCreateEditVM();

            //la canción con la lista de artistas para agregar o quitar
            cancionEdit.Cancion = cancion;
            LlenaListaArtistas(cancionEdit);

            return(View(cancionEdit));
        }
Пример #5
0
        public ActionResult Edit([Bind(Include = "Cancion,ArtistasSeleccionados")] CancionCreateEditVM cancionVM)
        {
            TICaseFormat = new CultureInfo("es-MX", false).TextInfo;
            try
            {
                if (ModelState.IsValid)
                {
                    //la canción debe contener al menos un artista
                    if (cancionVM.ArtistasSeleccionados.Count == 0)
                    {
                        ModelState.AddModelError("", "Selecciona el artista de la canción.");
                    }
                    if (ModelState.IsValid)
                    {
                        //validación de canción duplicada en la BD
                        if (!db.Canciones.AsEnumerable().Any(s => s.Nombre.ToLower() == cancionVM.Cancion.Nombre.Trim().ToLower() &&
                                                             s.Artistas.Count == cancionVM.ArtistasSeleccionados.Count &&
                                                             !s.Artistas.Except(cancionVM.Cancion.Artistas, new Models.ComparadorArtista())
                                                             .Any() &&
                                                             s.CancionID != cancionVM.Cancion.CancionID))
                        {
                            //buscamos la canción original en la BD
                            Cancion cancion = db.Canciones.Find(cancionVM.Cancion.CancionID);

                            //aplicamos los cambios recibidos
                            cancion.Nombre   = TICaseFormat.ToTitleCase(cancionVM.Cancion.Nombre.Trim());
                            cancion.Duracion = cancionVM.Cancion.Duracion;
                            cancion.Año      = cancionVM.Cancion.Año;

                            //generamos la lista de artistas seleccionados por el usuario
                            var artistasSeleccionados = db.Artistas.Where(a =>
                                                                          cancionVM.ArtistasSeleccionados.Contains(a.ArtistaID)).ToList();

                            //obtenemos la lista de artistas a eliminar (los artistas desasignados por el usuario)
                            var artistasAEliminar = cancion.Artistas.AsEnumerable()
                                                    .Except(artistasSeleccionados, new Models.ComparadorArtista());

                            artistasAEliminar.ToList().ForEach(s => cancion.Artistas.Remove(s));

                            //obtenemos la lista de artistas a agregar (los artistas asignados por el usuario)
                            var artistasAgregados = artistasSeleccionados.Except(cancion.Artistas.AsEnumerable(),
                                                                                 new Models.ComparadorArtista());

                            artistasAgregados.ToList().ForEach(s =>
                            {
                                cancion.Artistas.Add(s);
                                db.Entry(s).State = System.Data.Entity.EntityState.Unchanged;
                            });

                            db.Entry(cancion).State = EntityState.Modified;
                            db.SaveChanges();
                            return(RedirectToAction("Index"));
                        }
                        else
                        {
                            ModelState.AddModelError("", "La canción ya está registrada en la base de datos.");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError("", "Ocurrió un error al modificar la canción: \n" + e.Message);
            }
            LlenaListaArtistas(cancionVM);
            return(View(cancionVM));
        }