public ActionResult Annuler(int idSortie, int?idAdherent, int?idAssociation, int?idHistoriquePaiement)
        {
            Sortie sortie = db.Sorties.Find(idSortie);

            if (sortie.CapaciteActuelle > 0)
            {
                sortie.CapaciteActuelle--;
            }

            Adherent adherent = db.Adherents.Find(idAdherent);

            SortieAdherent sortieAdherent = db.SortieAdherents.Find(idSortie, idAdherent, idAssociation);

            if (sortieAdherent != null)
            {
                db.SortieAdherents.Remove(sortieAdherent);
            }

            HistoriquePaiement historiquePaiement = db.HistoriquePaiements.Where(a => a.IdAdherent == adherent.IdAdherent && a.IdSortie == idSortie).SingleOrDefault();

            if (historiquePaiement != null)
            {
                db.HistoriquePaiements.Remove(historiquePaiement);
                adherent.Solde += sortie.Prix;
            }

            db.SaveChanges();
            return(RedirectToAction("Details/" + idSortie));
        }
        //GET
        public ActionResult Inscription(int?idSortie, int?idAdherent)
        {
            Adherent adherent = db.Adherents.Find(idAdherent);

            //Sécurité
            if (adherent == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            //Instanciation de la sortie à laquelle on souhaite s'inscrire
            Sortie maSortie = db.Sorties.Find(idSortie);

            if (adherent.Solde < maSortie.Prix)
            {
                TempData["Modal"] = 1;
            }
            else if (maSortie.NbInscrits >= maSortie.CapaciteMaximum)
            {
                TempData["Modal"] = 2;
            }
            else
            {
                //Sécurité
                if (maSortie == null)
                {
                    return(HttpNotFound());
                }

                adherent.Solde     -= maSortie.Prix;
                Session["Adherent"] = adherent;

                maSortie.NbInscrits++;

                //Instanciation d'un objet vierge de type sortie adhérent, dont on renseigne les valeurs pour ses différents champs
                SortieAdherent sortieAdherent = new SortieAdherent();
                sortieAdherent.IdAdherent    = adherent.IdAdherent;
                sortieAdherent.IdSortie      = (int)idSortie;
                sortieAdherent.IdAssociation = adherent.IdAssociation;
                sortieAdherent.Statut        = true;

                db.SortieAdherents.Add(sortieAdherent);
                db.SaveChanges();

                //Même chose qu'au dessous, sauf que c'est pour l'historique de paiement
                HistoriquePaiement historiquePaiement = new HistoriquePaiement();
                historiquePaiement.IdAdherent    = adherent.IdAdherent;
                historiquePaiement.IdAssociation = adherent.IdAssociation;
                historiquePaiement.Paiement      = maSortie.Prix;
                historiquePaiement.Date          = DateTime.Now;
                historiquePaiement.IdSortie      = (int)idSortie;

                //Sauvegarde en base de données
                db.HistoriquePaiements.Add(historiquePaiement);
                db.SaveChanges();
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult Participer(int idSortie, int?idAdherent, int?idAssociation, int?idHistoriquePaiement)
        {
            Sortie sortie = db.Sorties.Find(idSortie);

            if (sortie.CapaciteActuelle != sortie.CapaciteMaximum)
            {
                sortie.CapaciteActuelle++;
            }

            Adherent adherent = db.Adherents.Find(idAdherent);

            adherent.Solde -= sortie.Prix;

            SortieAdherent existSortieAdherent = db.SortieAdherents.Find(idSortie, idAdherent, idAssociation);

            if (existSortieAdherent == null)
            {
                SortieAdherent sortieAdherent = new SortieAdherent();
                sortieAdherent.IdAssociation = adherent.Association.IdAssociation;
                sortieAdherent.IdAdherent    = adherent.IdAdherent;
                sortieAdherent.IdSortie      = sortie.IdSortie;
                db.SortieAdherents.Add(sortieAdherent);
            }

            HistoriquePaiement existePaiement = db.HistoriquePaiements.Where(a => a.IdAdherent == adherent.IdAdherent && a.IdSortie == idSortie).SingleOrDefault();

            if (existePaiement == null)
            {
                HistoriquePaiement historiquePaiement = new HistoriquePaiement();
                historiquePaiement.Adherent    = adherent;
                historiquePaiement.Association = adherent.Association;
                historiquePaiement.Paiement    = sortie.Prix;
                historiquePaiement.Date        = DateTime.Now;
                historiquePaiement.IdSortie    = idSortie;
                db.HistoriquePaiements.Add(historiquePaiement);
            }

            db.SaveChanges();
            return(RedirectToAction("Details/" + idSortie));
        }
        //GET
        public ActionResult CancelInscription(int?idSortie, int?idAdherent, int?idAssociation, int?idHistoriquePaiement)
        {
            Adherent adherent = db.Adherents.Find(idAdherent);

            //Sécurité
            if (adherent == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Sortie maSortie = db.Sorties.Find(idSortie);

            adherent.Solde     += maSortie.Prix;
            Session["Adherent"] = adherent;

            maSortie.NbInscrits--;


            //Sécurité
            if (maSortie == null)
            {
                return(HttpNotFound());
            }

            //Instanciation de la sortie à laquelle on souhaite annuler son incription,  via les 3 paramètres de notre table sortieAdhérent, et suppression de l'incription
            SortieAdherent sortieAdherent = db.SortieAdherents.Find(idSortie, idAdherent, idAssociation);

            db.SortieAdherents.Remove(sortieAdherent);


            //Recherche de l'historique paiement lié à la sortie via l'idSortie, afin de le delete
            HistoriquePaiement historiquePaiement = db.HistoriquePaiements.FirstOrDefault(hp => hp.IdSortie == maSortie.IdSortie);

            historiquePaiement.Statut = false;

            db.SaveChanges();
            return(RedirectToAction("Index"));
        }