public DTODisponibilidadeSolucaoEducacionalPorUsuarioT ConsultarDisponibilidadeMatriculaPorUsuario(
            int pIdUsuario, int?pagina)
        {
            var retorno = new DTODisponibilidadeSolucaoEducacionalPorUsuarioT();

            var usuario = new ManterUsuario().ObterUsuarioPorID(pIdUsuario);

            new ManterMatriculaOferta().ObterPorUsuario(pIdUsuario);

            var listaPermissaoSolucaoEducacional = new BMSolucaoEducacional().ObterListaDePermissoes(usuario.ID, 0);
            var idsSolucoesPermissoes            = listaPermissaoSolucaoEducacional.Select(f => f.SolucaoEducacional.ID).ToList();

            var filtro = new SolucaoEducacional();

            var recuperarListaSolucaoEducacional = new ManterSolucaoEducacional().ObterPorFiltroPesquisa(filtro, true,
                                                                                                         idsSolucoesPermissoes);

            const int skip = 5;

            var paginaAtual = (pagina.HasValue && pagina.Value > 0) ? (pagina.Value - 1) : 0;

            retorno.PaginaAtual  = (paginaAtual + 1);
            retorno.QtdeSolucoes = recuperarListaSolucaoEducacional.Count();
            retorno.QtdePaginas  = Convert.ToInt32((retorno.QtdeSolucoes / skip));
            if ((retorno.QtdeSolucoes % skip) > 0)
            {
                retorno.QtdePaginas++;
            }

            foreach (var item in recuperarListaSolucaoEducacional.Skip((paginaAtual * skip)).Take(skip).ToList())
            {
                retorno.DTODisponibilidadeSolucaoEducacional.Add(
                    ConsultarDisponibilidadeMatriculaSolucaoEducacional(pIdUsuario, item.ID));
            }

            return(retorno);
        }