public ActionResult Configuration(int id = 0)
        {
            Subscription subscription = db.Subscription.Where(sub => sub.IdSubscription == id).FirstOrDefault();

            // Si souscription payée
            if (subscription != null && subscription.IsPaid == true)
            {
                // si la Firm correspondant ne possède pas encore un admin
                if (subscription.FirmInstitution.idUserCreated == null)
                {
                    UserConfigurationModel objUCM = new UserConfigurationModel();
                    objUCM.IdFirmInstitution = subscription.IdFirmInstitution;
                    objUCM.IdSubscription = subscription.IdSubscription;

                    return View(objUCM);
                }
                else
                {
                    return RedirectToAction("Index", "Home", null); // TODO: à rediriger vers une page X à determiner
                }
            }
            else
            {
                var languageData = PageLanguageHelper.GetLanguageContent("Public", "Configuration");
                ViewBag.ShowInfo = languageData.GetContent("Config_Unpaid");
                return View();
            }
        }
        public ActionResult Configuration(UserConfigurationModel objUC)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var languageData = PageLanguageHelper.GetLanguageContent("Public", "Configuration");

                    // si l'objet existe bien, et que les 2 mots de passe correspondent bien, on enregistre le USER
                    if (objUC != null && objUC.Password.CompareTo(objUC.PasswordConfirmation) == 0)
                    {
                        // Tester si l'email est deja existant
                        User user = UserBL.GetUserByEmail(objUC.Email);

                        if (user == null) //Si non existant
                        {
                            UserProfile objUserProfile = UserProfileBL.GetUserProfileByProfileName(UserProfileBL.Administrator);

                            if (objUserProfile != null)
                            {

                                if (UserBL.ValidatePassword(objUC.Password))
                                {
                                    if (!UserBL.IsEmailUsed(objUC.Email))
                                    {
                                        #region "Enregistrement de l'USER"
                                        Upsilab.Data.Model.User objUser = new Upsilab.Data.Model.User()
                                        {
                                            idUser = Guid.NewGuid(),
                                            idUserProfile = objUserProfile.idUserProfile,
                                            UserLogin = objUC.Email,
                                            UserPassword = objUC.Password,
                                            UserEmail = objUC.Email,
                                            UserName = objUC.UserName,
                                            UserFirstName = objUC.UserFirstName,
                                            UserMobilePhone = objUC.UserMobilePhone,
                                            DateCreated = DateTime.Now,
                                            IsActive = true
                                        };

                                        UserBL.CreateUser(objUser, objUC.Password);



                                        #endregion

                                        FirmInstitution objFI = FirmInstitutionBL.GetFirmInstitutionByIdFirmInstitution(objUC.IdFirmInstitution);

                                        #region Création de l'adviser correspondant à l'admin

                                        FirmInstitutionAdviser _adv = new FirmInstitutionAdviser();

                                        _adv.idUser = objUser.idUser;
                                        _adv.idFirmInstitution = objFI.idFirmInstitution;
                                        _adv.DateCreated = DateTime.Now;
                                        Business.Configuration.FirmInstitutionAdviserBL.CreateAdminAdviser(_adv, objUser);

                                        #endregion

                                        #region "Mise à jour de la FirmInstitution (ajout de IdUserCreated)"
                                        if (objFI != null)
                                        {
                                            objFI.idUserCreated = objUser.idUser;

                                            using (UpsilabEntities context = new UpsilabEntities())
                                            {
                                                context.FirmInstitution.Attach(objFI);
                                                context.ObjectStateManager.ChangeObjectState(objFI, System.Data.EntityState.Modified);
                                                context.SaveChanges();
                                            }
                                        }
                                        #endregion

                                        #region "Envoi de mail de remerciement"
                                        if (objFI != null)
                                        {
                                            Subscription objSubscription = db.Subscription.Where(sub => sub.IdSubscription == objUC.IdSubscription).FirstOrDefault();
                                            SouscriptionBL.SendInvoiceMail(objSubscription, false); //Send to Admin
                                        }
                                        else
                                        {
                                            ViewBag.Info = languageData.GetContent("Config_MailError");
                                        }
                                        #endregion


                                        ViewBag.Info = "Enregistrement réussi.";

                                        //If all is OK, log on the Admnistrator to the Extranet User
                                        if (SessionManager.Exists(UserBL.UserIdSessionKey))
                                        {
                                            SessionManager.Clear(UserBL.UserIdSessionKey);
                                        }

                                        SessionManager.Add<Guid>(objUser.idUser, UserBL.UserIdSessionKey);

                                        return RedirectToAction("AuthentificationExtranetUser", "Utilisateur");
                                    } // Fin test password
                                }
                                else
                                {

                                    ViewBag.Info = languageData.GetContent("Config_PwFormatError");
                                }
                            } // Fin test profil
                            else
                            {
                                ViewBag.Info = languageData.GetContent("Config_ProfilError");
                            }
                        } //Fin test email existant
                        else
                        {
                            ViewBag.Info = "Cette adresse email est déjà enregistrée dans le système.";
                        }
                    }
                    else
                    {
                        ViewBag.Info = languageData.GetContent("Config_PwConfirmError");
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Info = "Erreur: " + ex.Message;
            }

            return View();
        }
        public ActionResult Configuration(UserConfigurationModel objUC)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var languageData = Upsilab.Business.Utility.PageLanguageHelper.GetLanguageContent("Public", "Configuration");

                    // si l'objet existe bien, et que les 2 mots de passe correspondent bien, on enregistre le USER
                    if (objUC != null && objUC.Password.CompareTo(objUC.PasswordConfirmation) == 0)
                    {
                        // Tester si l'email est deja existant
                        if (!UserBL.IsEmailUsed(objUC.Email)) //Ne pas tester l'email d'un client final
                        {
                            UserProfile objUserProfile = UserProfileBL.GetUserProfileByProfileName(UserProfileBL.Administrator);

                            if (objUserProfile != null)
                            {

                                if (UserBL.ValidatePassword(objUC.Password))
                                {
                                    if (!UserBL.IsEmailUsed(objUC.Email))
                                    {
                                        #region "Enregistrement de l'USER"
                                        Upsilab.Data.Model.User objUser = new Upsilab.Data.Model.User()
                                        {
                                            idUser = Guid.NewGuid(),
                                            idUserProfile = objUserProfile.idUserProfile,
                                            UserLogin = objUC.Email,
                                            UserPassword = objUC.Password,
                                            UserEmail = objUC.Email,
                                            UserName = objUC.UserName,
                                            UserFirstName = objUC.UserFirstName,
                                            UserMobilePhone = objUC.UserMobilePhone,
                                            DateCreated = DateTime.Now,
                                            IsActive = true
                                        };

                                        UserBL.CreateUser(objUser, objUC.Password);



                                        #endregion

                                        FirmInstitution objFI = FirmInstitutionBL.GetFirmInstitutionByIdFirmInstitution(objUC.IdFirmInstitution);

                                        #region Création de l'adviser correspondant à l'admin

                                        FirmInstitutionAdviser _adv = new FirmInstitutionAdviser()
                                        {

                                            idUser = objUser.idUser,
                                            idFirmInstitution = objFI.idFirmInstitution,
                                            idFirmInstitutionParent = objFI.idFirmInstitution,
                                            DateCreated = DateTime.Now,
                                        };

                                        Business.Configuration.FirmInstitutionAdviserBL.CreateAdminAdviser(_adv, objUser);

                                        #endregion

                                        #region "Mise à jour de la FirmInstitution (ajout de IdUserCreated)"
                                        if (objFI != null)
                                        {
                                            objFI.idUserCreated = objUser.idUser;

                                            using (UpsilabEntities context = new UpsilabEntities())
                                            {
                                                context.FirmInstitution.Attach(objFI);
                                                context.ObjectStateManager.ChangeObjectState(objFI, System.Data.EntityState.Modified);
                                                context.SaveChanges();
                                            }
                                        }
                                        #endregion

                                        #region "Envoi de mail de remerciement"
                                        //Ne plus envoyer l'email #8072
                                        //if (objFI != null)
                                        //{
                                        //    Subscription objSubscription = db.Subscription.Where(sub => sub.IdSubscription == objUC.IdSubscription).FirstOrDefault();
                                        //    SouscriptionBL.SendInvoiceMail(objSubscription, false); //Send to Admin
                                        //}
                                        //else
                                        //{
                                        //    ViewBag.Info = languageData.GetContent("Config_MailError");
                                        //}
                                        #endregion

                                        ViewBag.Info = languageData.GetContent("Config_Saved");

                                        //If all is OK, log on the Admnistrator to the Extranet User
                                        if (SessionManager.Exists(UserBL.UserIdSessionKey))
                                        {
                                            SessionManager.Clear(UserBL.UserIdSessionKey);
                                        }

                                        SessionManager.Add<Guid>(objUser.idUser, UserBL.UserIdSessionKey);

                                        return RedirectToAction("AuthentificationExtranetUser", "Utilisateur");
                                    } // Fin test password
                                }
                                else
                                {

                                    ViewBag.Info = string.Format("{0}<br/>", languageData.GetContent("mot_de_passe_obligatoirement"));
                                    ViewBag.Info += string.Format("- {0}<br/>", languageData.GetContent("mot_de_passe_longueur_minimale"));
                                    ViewBag.Info += string.Format("- {0}<br/>", languageData.GetContent("mot_de_passe_uniquement_chiffre_et_lettres"));
                                    ViewBag.Info += string.Format("- {0}<br/>", languageData.GetContent("mot_de_passe_au_moins_2_chiffre"));
                                    ViewBag.Info += string.Format("{0}<br/>", languageData.GetContent("mot_de_passe_sensible_a_la_casse"));
                                }
                            } // Fin test profil
                            else
                            {
                                ViewBag.Info = languageData.GetContent("Config_ProfilError");
                            }
                        } //Fin test email existant
                        else
                        {
                            ViewBag.Info = languageData.GetContent("Config_UsedMail"); ;
                        }
                    }
                    else
                    {
                        ViewBag.Info = languageData.GetContent("Config_PwConfirmError");
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Info = "Erreur: " + ex.Message;
            }

            return View();
        }