public TableaudebordVM GetDashboardData(Guid? _idSelectedUser)
        {
            var model = new TableaudebordVM();
            try
            {
                var languageData = Upsilab.Business.Utility.PageLanguageHelper.GetLanguageContent("User", "Convention");

                //TODO : Filtre sur user selectionné ????
                var currentUser = SessionManager.GetUserSession();
                var sdg = SessionManager.GetFirmInstitutionSession();
                var cgpList = CgpBL.GetListCGPWithConventionBySdg(sdg.idFirmInstitution);
                //var transaction = 

                //
                //Convention
                //
                model.StatutConvention = new TableaudebordVM.DocumentStatusModel()
                {
                    IconStringName = "puceT4",
                    FilterData = "Convention",
                    StatutType = TableaudebordVM.DocumentStatusModel.StatusType.Convention,
                    StatusCollection = new Dictionary<int,int>()

                };

                model.StatutConvention.StatusCollection.Add((int)DocumentBL.Status.WaitingForClientApproval, 0);
                model.StatutConvention.StatusCollection.Add((int)DocumentBL.Status.Approved, 0);
                model.StatutConvention.StatusCollection.Add((int)DocumentBL.Status.Rejected, 0);
                model.StatutConvention.StatusCollection.Add((int)DocumentBL.Status.WaitingForClientSignature, 0);
                model.StatutConvention.StatusCollection.Add((int)DocumentBL.Status.Completed, 0);

                //
                //Avenant
                //
                model.StatutEvenant = new TableaudebordVM.DocumentStatusModel()
                {
                    IconStringName = "puceT4",
                    FilterData = "Avenant",
                    StatutType = TableaudebordVM.DocumentStatusModel.StatusType.Avenant,
                    StatusCollection = new Dictionary<int, int>()
                };
                
                model.StatutEvenant.StatusCollection.Add((int)DocumentBL.Status.WaitingForClientApproval, 0);
                model.StatutEvenant.StatusCollection.Add((int)DocumentBL.Status.Approved, 0);                
                model.StatutEvenant.StatusCollection.Add((int)DocumentBL.Status.Rejected, 0);
                model.StatutEvenant.StatusCollection.Add((int)DocumentBL.Status.WaitingForClientSignature, 0);
                model.StatutEvenant.StatusCollection.Add((int)DocumentBL.Status.Completed, 0);

                int statutkey = (int)DocumentBL.Status.InProgress;
                var strstatut = string.Empty;
                foreach (var cgp in cgpList)
                {
                    strstatut = cgp.ConventionStatus;
                    if (!string.IsNullOrEmpty(strstatut))
                    {
                        strstatut = strstatut.Trim();
                        statutkey = (int)Enum.Parse(typeof(DocumentBL.Status), strstatut, true);
                        if (!string.IsNullOrEmpty(strstatut))
                        {
                            if (model.StatutConvention.StatusCollection.ContainsKey(statutkey))
                                model.StatutConvention.StatusCollection[statutkey]++;
                        }
                    }

                    strstatut = cgp.AvenantStatus;
                    if (!string.IsNullOrEmpty(strstatut))
                    {
                        strstatut = strstatut.Trim();
                        if (!string.IsNullOrEmpty(strstatut))
                        {
                            statutkey = (int)Enum.Parse(typeof(DocumentBL.Status), strstatut, true);
                            if (model.StatutEvenant.StatusCollection.ContainsKey(statutkey))
                                model.StatutEvenant.StatusCollection[statutkey]++;
                        }
                    }
                }

                model.StatutConvention.NbToComplete = CgpBL.CountConventionToComplete(sdg.idFirmInstitution);
                model.StatutConvention.NbToUpdate = CgpBL.CountConventionToUpdate(sdg.idFirmInstitution);

                //ViewBag.lstUsers = new SelectList(new List<string>());

               //Get selected user
                Guid? selectedUserInSession = Guid.Empty;

                SessionManager.Get<Guid?>(UserBL.SelectedUserIdSessionKey, out selectedUserInSession);

                Guid? selectedUser = _idSelectedUser.HasValue ? _idSelectedUser.Value : (selectedUserInSession.HasValue ? selectedUserInSession : currentUser.idUser);
                var firmInstitutionParent = SessionManager.GetFirmInstitutionSession();

                model.CurrentSelectedUser = currentUser;
                model.idCurrentUser = model.CurrentSelectedUser.idUser;

                //Si la FirmInstitutionParent est "SingleUsersDB", pas de dropdown User
                if (firmInstitutionParent.SingleUsersDB)
                {
                    model.ShowSelection = false;
                }
                else
                {
                    //Show dropdown Adviser if current user connected is not an adviser
                    model.ShowSelection = model.CurrentSelectedUser.CanViewAdvisersList();
                }

                //Get User related data for Adviser/Admin
                #region Advisers list
                if (model.ShowSelection)
                {
                    model.UserSelection.Add(currentUser);

                    bool filterAdvisersByUserFirm = (model.CurrentSelectedUser.IsAdministrativeAssistant()) ? true : false;
                    var adviserUsers = from a in Business.Configuration.FirmInstitutionAdviserBL.GetAdvisersByIdFirmParent(SessionManager.GetFirmInstitutionSession(), model.CurrentSelectedUser, filterAdvisersByUserFirm, false)
                                       .GroupBy(a => a.idUser)
                                       .Select(ad => ad.First())
                                       .ToList<FirmInstitutionAdviser>().AsQueryable()
                                       select a.User;


                    List<Upsilab.Data.Model.User> lstUserAdvisers = adviserUsers.OrderBy(a => a.UserName).ToList();
                    lstUserAdvisers.Insert(0, new User() { idUser = Guid.Empty, UserName = languageData.GetContent("Tous_les_utilisateurs"), UserFirstName = "", UserLogin = "", UserPassword = "", UserEmail = "", UserMobilePhone = "", DateCreated = DateTime.Now, IsActive = true, IsDeleted = false });

                    // ViewBag.CurrentUserId
                    ViewBag.lstUsers = new SelectList(lstUserAdvisers, "idUser", "EntireName", selectedUser);

                    if (selectedUser.HasValue)
                    {
                        model.idCurrentUser = selectedUser.Value;
                        model.CurrentSelectedUser = model.UserSelection.Where(u => u.idUser.Equals(selectedUser.Value)).FirstOrDefault();
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                Upsilab.Business.Log.Log.AppendException(ex);
            }

            return model;
        }
 public ActionResult Index(TableaudebordVM dashboardData)
 {
     return View();
 }