public ActionResult Index(int?UsuarioId, RolEmpresa rolEmpresa, string btnRoles, string btnClientes, string btnGuardar,
                                  string selectedClientes, string selectedRol, string selectedModalRoles)
        {
            ViewBag.Usuarios  = usuarioRepository.GetAll().ToList();
            ViewBag.IdUsuario = UsuarioId;

            try
            {
                if (UsuarioId == null)
                {
                    throw new Exception(" Debe seleccionar un Usuario");
                }

                var selectedUser = usuarioRepository.GetFiltered(s => s.Id == UsuarioId.Value).FirstOrDefault();

                if (selectedUser == null)
                {
                    throw new Exception(" No existe el usuario seleccionado");
                }

                if (btnRoles != null)
                {
                    if (selectedModalRoles == null || selectedModalRoles.Trim() == string.Empty)
                    {
                        throw new Exception(" Debe seleccionar al menos un Rol");
                    }

                    var rolesSeleccionados = GetRolesFromArray(selectedModalRoles);

                    foreach (var rol in rolesSeleccionados)
                    {
                        if (rolEmpresaRepository.GetFiltered(s => s.Rol_Id == rol.Id && s.Usuario_Id == selectedUser.Id).Any())
                        {
                            continue;
                        }

                        var newRolEmpresa = new RolEmpresa();
                        newRolEmpresa.Usuario_Id = selectedUser.Id;
                        newRolEmpresa.Rol_Id     = rol.Id;
                        rolEmpresaRepository.Add(newRolEmpresa, this.User.UserID);

                        if (rol.Id == 26)
                        {
                            var rolesclientesAdministracion = usuarioRolClienteRepository.GetFiltered(s => s.UsuarioRol.Usuario_Id == 1028 && s.Estado == true, s => s.UsuarioRol).ToList();

                            foreach (var rolscli in rolesclientesAdministracion)
                            {
                                UsuarioRolCliente urc  = new UsuarioRolCliente();
                                List <RolEmpresa> rcli = rolEmpresaRepository.GetFiltered(u => u.Usuario.Id == selectedUser.Id).ToList();
                                var rolempresa         = rcli[0];
                                urc.UsuarioRol_Id      = rolempresa.Id;
                                urc.Cliente_Id         = rolscli.Cliente_Id;
                                urc.FechaCreacion      = rolscli.FechaCreacion;
                                urc.FechaActualizacion = rolscli.FechaActualizacion;
                                urc.Estado             = rolscli.Estado;
                                urc.idUsuario          = selectedUser.Id;
                                usuarioRolClienteRepository.Add(urc, selectedUser.Id);
                            }
                        }
                    }

                    rolEmpresa.Roles    = rolEmpresaRepository.GetFiltered(s => s.Usuario_Id == selectedUser.Id).Select(s => s.Rol).ToList();
                    rolEmpresa.Usuario  = selectedUser;
                    rolEmpresa.Clientes = new Business.Views.vClientes();

                    SetMessage(SUCCESS, "Se han guardado correctamente los Roles.");
                    return(View(rolEmpresa));
                }

                if (btnClientes != null)
                {
                    if (selectedRol == null || selectedRol.Trim() == string.Empty)
                    {
                        throw new Exception(" Debe seleccionar al menos un Rol");
                    }

                    if (selectedClientes == null || selectedClientes.Trim() == string.Empty)
                    {
                        throw new Exception(" Debe seleccionar al menos un Cliente");
                    }

                    //Solamente debe ser UNO
                    var rolesSeleccionados = GetRolesFromArray(selectedRol).FirstOrDefault();

                    var clientesSeleccionados = GetClientesFromArray(selectedClientes);

                    var rolesEmpresa = rolEmpresaRepository.GetFiltered(s => s.Usuario_Id == selectedUser.Id && s.Rol_Id == rolesSeleccionados.Id).ToList();


                    foreach (var re in rolesEmpresa)
                    {
                        foreach (var cliente in clientesSeleccionados)
                        {
                            if (usuarioRolClienteRepository.GetFiltered(s => s.Cliente_Id == cliente.Id && s.UsuarioRol_Id == re.Id).Any())
                            {
                                continue;
                            }

                            var usuarioRolCliente = new UsuarioRolCliente();
                            usuarioRolCliente.UsuarioRol_Id = re.Id;
                            usuarioRolCliente.Cliente_Id    = cliente.Id;

                            usuarioRolClienteRepository.Add(usuarioRolCliente, this.User.UserID);
                        }
                    }

                    rolEmpresa.Clientes = new Business.Views.vClientes();

                    rolEmpresa.Roles   = rolEmpresaRepository.GetFiltered(s => s.Usuario_Id == selectedUser.Id).Select(s => s.Rol).ToList();
                    rolEmpresa.Usuario = selectedUser;

                    //TO DO
                    var userRolClient = usuarioRolClienteRepository.GetFiltered(s => s.UsuarioRol.Rol_Id == rolesSeleccionados.Id && s.UsuarioRol.Usuario_Id == selectedUser.Id).ToList();

                    foreach (var item in userRolClient)
                    {
                        var listRow = (new CRM.Business.Views.vClientes()).GetViewModel().AsEnumerable()
                                      .Where(r => r.Field <int>("ID") == item.Cliente_Id).ToList();
                        foreach (DataRow dr in listRow)
                        {
                            rolEmpresa.Clientes.Datos.Rows.Add(dr.ItemArray);
                        }
                    }

                    //rolEmpresa.Clientes = usuarioRolClienteRepository.GetFiltered(s => s.UsuarioRol.Rol_Id == rolesSeleccionados.Id && s.UsuarioRol.Usuario_Id == selectedUser.Id).Select(s => s.Cliente).ToList();

                    ViewBag.IdRol = rolesSeleccionados.Id; //Lo recojo cuando se carga la grilla

                    SetMessage(SUCCESS, " Se han guardado correctamente los Clientes.");
                    return(View(rolEmpresa));
                }
            }
            catch (Exception ex)
            {
                SetMessage(ERROR, ex.Message);

                List <Rol> rolesUsuario = rolEmpresaRepository.GetFiltered(s => s.Usuario_Id == UsuarioId.Value).Select(s => s.Rol).ToList();
                if (rolesUsuario == null)
                {
                    rolEmpresa.Roles = new List <Rol>();
                }
                else
                {
                    rolEmpresa.Roles = rolesUsuario;
                }

                if (selectedRol == null || selectedRol.Trim() == string.Empty)
                {
                    rolEmpresa.Clientes = new Business.Views.vClientes();
                }
                else
                {
                    var rolesSeleccionados = GetRolesFromArray(selectedRol).FirstOrDefault();
                    var userRolClient      = usuarioRolClienteRepository.GetFiltered(s => s.UsuarioRol.Rol_Id == rolesSeleccionados.Id &&
                                                                                     s.UsuarioRol.Usuario_Id == UsuarioId.Value && s.Estado == true).ToList();

                    if (userRolClient == null || userRolClient.Count == 0)
                    {
                        rolEmpresa.Clientes = new Business.Views.vClientes();
                    }

                    if (rolEmpresa.Clientes == null)
                    {
                        rolEmpresa.Clientes = new Business.Views.vClientes();
                    }

                    foreach (var item in userRolClient)
                    {
                        var listRow = (new CRM.Business.Views.vClientes()).GetViewModel().AsEnumerable()
                                      .Where(r => r.Field <int>("ID") == item.Cliente_Id).ToList();
                        foreach (DataRow dr in listRow)
                        {
                            rolEmpresa.Clientes.Datos.Rows.Add(dr.ItemArray);
                        }
                    }
                    //TO DO
                    //rolEmpresa.Clientes = usuarioRolClienteRepository.GetFiltered(s => s.UsuarioRol.Rol_Id == rolesSeleccionados.Id && s.UsuarioRol.Usuario_Id == UsuarioId.Value).Select(s => s.Cliente).ToList();

                    ViewBag.IdRol = rolesSeleccionados.Id; //Lo recojo cuando se carga la grilla
                }
            }

            return(View(rolEmpresa));
        }