/// <summary>
        /// Obtém as notas de compra por usuário
        /// </summary>
        /// <param name="idUsuario">Id do usuário</param>
        /// <param name="datainicial">data inicial de pesquisa</param>
        /// <param name="dataFinal">data final da pesquisa</param>
        /// <param name="tokenCancelamento">O token de cancelamento para a operação assíncrona/param>
        /// <returns>Uma lista de notas de compras acrescida da ação do usuário</returns>
        public async Task <NotaDeCompraPaginaModel> ObterDadosAsync(long idUsuario, DateTime datainicial, DateTime dataFinal, CancellationToken tokenCancelamento = default)
        {
            UsuarioModel usuario = await usuarioServices.ObterAsync(idUsuario);

            AcaoUsuario acaoUsuario = usuario.Papel == "V" ? AcaoUsuario.Vistar : AcaoUsuario.Aprovar;

            List <NotaDeCompra> notaDeComprasTemp = await unitOfWork.NotaDeCompraRepositorio
                                                    .Todos(predicado : x => x.DataEmissao.Date >= datainicial &&
                                                           x.DataEmissao.Date <= dataFinal &&
                                                           x.ValorTotal >= usuario.ValorMinimo &&
                                                           x.ValorTotal <= usuario.ValorMaximo &&
                                                           x.Status == false,
                                                           carregamentoAntecipado : x => x.Include(v => v.HistoricoAprovacoes)
                                                           .ThenInclude(u => u.Usuario))
                                                    .ToListAsync(tokenCancelamento);

            List <NotaDeCompraModel> notaDeCompras = new List <NotaDeCompraModel>();

            notaDeComprasTemp.ForEach(x =>
            {
                if (!x.HistoricoAprovacoes.Any(h => h.Usuario.Id == idUsuario))
                {
                    StatusNotaDeCompra statusNotaDeCompra = ValidarStatusNotaDeCompra(x);
                    if (usuario.Papel == "V" && statusNotaDeCompra == StatusNotaDeCompra.Pendente)
                    {
                        notaDeCompras.Add(mapper.Map <NotaDeCompraModel>(x));
                    }
                    else if (usuario.Papel == "A" && statusNotaDeCompra == StatusNotaDeCompra.AguardandoAprovacao)
                    {
                        notaDeCompras.Add(mapper.Map <NotaDeCompraModel>(x));
                    }
                }
            });

            NotaDeCompraPaginaModel notaDeCompraPaginaModel = new NotaDeCompraPaginaModel
            {
                AcaoUsuario        = acaoUsuario,
                NotaDeCompraModels = notaDeCompras
            };

            return(notaDeCompraPaginaModel);
        }
        /// <summary>
        /// Obtém as notas de compra por usuário
        /// </summary>
        /// <param name="idUsuario">Id do usuário</param>
        /// <param name="datainicial">data inicial de pesquisa</param>
        /// <param name="dataFinal">data final da pesquisa</param>
        /// <param name="tokenCancelamento">O token de cancelamento para a operação assíncrona/param>
        /// <returns>Uma lista de notas de compras acrescida da ação do usuário</returns>
        //public async Task<(AcaoUsuario acaoUsuario, List<NotaDeCompraModel> notaDeCompras)> ObterDadosAsync(long idUsuario, DateTime datainicial, DateTime dataFinal, CancellationToken tokenCancelamento = default)
        public async Task <NotaDeCompraPaginaModel> ObterDadosAsync(long idUsuario, DateTime datainicial, DateTime dataFinal, CancellationToken tokenCancelamento = default)
        {
            string url = $"https://localhost:44376/api/NotaDeCompra/obter-notas?idusuario={idUsuario}&datainicial={datainicial.ToString("yyyy-MM-dd")}&dataFinal={dataFinal.ToString("yyyy-MM-dd")}";
            HttpResponseMessage response = await HttpClient.GetAsync(url);

            if (response.IsSuccessStatusCode)
            {
                string responseBodyAsText = await response.Content.ReadAsStringAsync();

                NotaDeCompraPaginaModel notaDeCompraPaginaModel = JsonConvert.DeserializeObject <NotaDeCompraPaginaModel>(responseBodyAsText);

                return(notaDeCompraPaginaModel);
            }
            else
            {
                return(new NotaDeCompraPaginaModel
                {
                    AcaoUsuario = AcaoUsuario.Vistar,
                    NotaDeCompraModels = null
                });
            }
        }