/// <summary>
 /// Intialize la liste de style en cochant si edit
 /// </summary>
 private void InitializeStyleList(ManageTitresViewModel manage)
 {
     //Pour chaque style, si c'est edit on met la valeur à true si le titre est dans ce style sinon false
     manage.Styles = _styleRepository.FindAll().Select(vm => new StylesViewModel {
         IdStyle = vm.IdStyle, Libelle = vm.Libelle, Checked = (manage.Titre.Styles.Any(x => x.IdStyle == vm.IdStyle)) ? true : false
     }).ToList();
 }
        /// <summary>
        /// Permet d'initliaze la liste d'artistes et de styles avec id du titre en paramètre si edit et null si create
        /// </summary>
        private ManageTitresViewModel InitializeList(int?id)
        {
            ManageTitresViewModel titresMTVM = new ManageTitresViewModel();

            titresMTVM.Titre = new TitresViewModel {
                IdTitre = (id.HasValue) ? (int)id : 0, DateSortie = DateTime.Now, Styles = new List <StylesViewModel>()
            };
            if (id.HasValue)
            { //Si la valeur id n'est pas égal à null, la propriété Titre est affecté.
                Titre titre = _titreRepository.Find((int)id);
                titresMTVM.Titre.Styles = titre.LienStyle.Select(x => new StylesViewModel {
                    IdStyle = x.IdStyle
                }).ToList();
                titresMTVM.Titre.Album       = titre.Album;
                titresMTVM.Titre.IdArtiste   = titre.IdArtiste;
                titresMTVM.Titre.NomTitre    = titre.Libelle;
                titresMTVM.Titre.NbLectures  = titre.NbLectures;
                titresMTVM.Titre.NbLikes     = titre.NbLikes;
                titresMTVM.Titre.NomArtiste  = titre.Artiste.Nom;
                titresMTVM.Titre.Duree       = titre.Duree;
                titresMTVM.Titre.DateSortie  = titre.DateSortie;
                titresMTVM.Titre.Chronique   = titre.Chronique;
                titresMTVM.Titre.UrlEcoute   = titre.UrlEcoute;
                titresMTVM.Titre.UrlJaquette = titre.UrlJaquette;
            }
            InitializeArtistesList(titresMTVM);
            InitializeStyleList(titresMTVM);
            return(titresMTVM);
        }
 /// <summary>
 /// Intialize la liste d'artiste
 /// </summary>
 private void InitializeArtistesList(ManageTitresViewModel manage)
 {
     //Initialize un SelectList pour asp-for dans la vue. Le premier paramètre est la liste à convertir, le deuxième est la propriété que l'on va afficher dans la liste, le troisième est la valeur affecter à une ligne
     //Le dernier paramètre est égal à l'artiste du titre si c'est un edit sinon c'est égal à null
     manage.Artistes = new SelectList(_artisteRepository.FindAll().Select(vm => new ArtisteViewModel {
         IdArtiste = vm.IdArtiste, NomArtiste = vm.Nom
     }), nameof(ArtisteViewModel.IdArtiste), nameof(ArtisteViewModel.NomArtiste), _artisteRepository.Find(manage.Titre.IdArtiste));
 }
        public IActionResult ManagePOST(ManageTitresViewModel manageTitresViewModel)
        {
            if (ModelState.IsValid)
            {
                //Get selected and affect them in new list of style
                List <Style> styles = new List <Style>();
                Titre        titre  = new Titre((manageTitresViewModel.Titre.IdTitre != 0) ? manageTitresViewModel.Titre.IdTitre : 0, manageTitresViewModel.Titre.IdArtiste, _artisteRepository.Find(manageTitresViewModel.Titre.IdArtiste), manageTitresViewModel.Titre.Chronique, manageTitresViewModel.Titre.Album, manageTitresViewModel.Titre.DateSortie, manageTitresViewModel.Titre.Duree, manageTitresViewModel.Titre.NomTitre, manageTitresViewModel.Titre.NbLectures, manageTitresViewModel.Titre.NbLikes, manageTitresViewModel.Titre.UrlEcoute, manageTitresViewModel.Titre.UrlJaquette);
                var          liens  = Request.Form["style.IdStyle"].Select(id => new LienStyle {
                    IdTitre = (manageTitresViewModel.Titre.IdTitre != 0) ? manageTitresViewModel.Titre.IdTitre : 0, Titre = titre, IdStyle = Convert.ToInt32(id), Style = _styleRepository.Find(Convert.ToInt32(id))
                }).ToList();
                titre.LienStyle = liens;

                if (manageTitresViewModel.Titre.IdTitre != 0)
                {
                    _titreRepository.Update(titre);
                }
                else
                {
                    _titreRepository.Add(titre);
                }
                return(RedirectToAction(nameof(TitresController.Index), "Titres", new { area = "Administration" }));
            }
            else
            {
                InitializeArtistesList(manageTitresViewModel);

                //Get already selected and affect them in new list of styleviewmodel to display them again
                manageTitresViewModel.Titre.Styles = Request.Form["style.IdStyle"].ToList().Select(vm =>
                {
                    Style style = _styleRepository.Find(Convert.ToInt32(vm));
                    return(new StylesViewModel {
                        IdStyle = style.IdStyle, Libelle = style.Libelle, Checked = true
                    });
                }).ToList();

                InitializeStyleList(manageTitresViewModel);
                return(this.View(nameof(TitresController.Manage), manageTitresViewModel));
            }
        }