/// <summary>
        /// traz os dados de atividades brutas e consolidadas de apenas um usuário, com suas referencias
        /// de forma assíncrona
        /// </summary>
        /// <param name="usuarioId"></param>
        /// <param name="inicio"></param>
        /// <param name="fim"></param>
        /// <returns></returns>
        public virtual async Task <AtividadeIndexViewModel> GetAtividadeIndexAsync(int usuarioId, DateTime?inicio, DateTime?fim)
        {
            AtividadeIndexViewModel result = await GetAtividadeIndexAsync(new List <int> {
                usuarioId
            }, inicio, fim);

            ReferenciaRepository refRep = new ReferenciaRepository(_db);

            var referencias = await refRep.GetReferenciasAsync(usuarioId, inicio, fim);

            var referenciaAtual = await refRep.GetReferenciaAsync(usuarioId);

            result.Referencias.Clear();
            result.Referencias.AddRange(referencias);
            result.ReferenciaAtual = referenciaAtual;

            if (ControleAcesso.TemAcesso(SegurancaResources.GERENCIAR_ATIVIDADES_FUNCIONARIOS))
            {
                UsuarioApplication usuapp = new UsuarioApplication(_db);
                var modelo = await usuapp.GetUsuariosComAtrasoNoEnvioAsync();

                result.UsuariosComAtrasoNoLancamento = modelo.Count;
            }


            return(result);
        }
 /// <summary>
 /// dispara alertas de atraso nas atividades diariamente
 /// </summary>
 public static void EnviaAlertasAgendados()
 {
     try
     {
         if (!DevServices.IsDevEnv())
         {
             using (var db = new TPAContext())
             {
                 UsuarioApplication usuApp = new UsuarioApplication(db);
                 usuApp.EnviarTodosOsAlertas(true, true);
             }
         }
     }
     catch (Exception err)
     {
         LogServices.LogarException(err);
     }
 }