/// <summary>
        /// Método responsável por salvar o último cronograma selecionado por um usuário.
        /// </summary>
        /// <param name="contexto">contexto do banco</param>
        /// <param name="login">Login do usuário</param>
        /// <param name="oidCronograma">Oid do Cronograma selecionado</param>
        public static void SalvarUltimoCronogramaSelecionado(WexDb contexto, string login, Guid?oidCronograma)
        {
            if (contexto == null || login == null || !oidCronograma.HasValue)
            {
                throw new ArgumentException("Os parâmetros session, oidUsuario e oidCronograma não podem nulos.");
            }

            User usuario = contexto.Usuario.FirstOrDefault(o => o.UserName == login);

            DateTime   dataAcesso            = DateTime.Now;
            Cronograma cronogramaSelecionado = contexto.Cronograma.FirstOrDefault(o => o.Oid == oidCronograma.Value);

            CronogramaUltimaSelecao ultimoCronogramaSelecionado = contexto.CronogramaUltimaSelecao.FirstOrDefault(o => o.OidUsuario == usuario.Oid);

            if (ultimoCronogramaSelecionado != null)
            {
                ultimoCronogramaSelecionado.DataAcesso = dataAcesso;
                ultimoCronogramaSelecionado.Usuario    = usuario;
                ultimoCronogramaSelecionado.Cronograma = cronogramaSelecionado;
                contexto.SaveChanges();
            }
            else
            {
                CronogramaUltimaSelecao ultimoCronograma = new CronogramaUltimaSelecao();
                ultimoCronograma.DataAcesso = dataAcesso;
                ultimoCronograma.Usuario    = usuario;
                ultimoCronograma.Cronograma = cronogramaSelecionado;
                contexto.CronogramaUltimaSelecao.Add(ultimoCronograma);
                contexto.SaveChanges();
            }
        }
        /// <summary>
        /// Método utilizado para remover todas as seleções dos usuários associados ao cronograma como ultima seleção.
        /// </summary>
        /// <param name="contexto">contexto do banco</param>
        /// <param name="oidCronograma">oid do cronograma a ser removidas as seleções</param>
        public static void RemoverSelecoesAssociadasAoCronograma(WexDb contexto, Guid oidCronograma)
        {
            List <CronogramaUltimaSelecao> colecao = contexto.CronogramaUltimaSelecao.Where(o => o.Cronograma.Oid == oidCronograma).ToList();

            if (colecao != null && colecao.Count > 0)
            {
                int contador = colecao.Count;
                for (int i = 0; i < contador; i++)
                {
                    CronogramaUltimaSelecao ultimaSelecao = colecao[i];
                    contexto.CronogramaUltimaSelecao.Remove(ultimaSelecao);
                    contexto.SaveChanges();
                }
            }
        }
        public void ExcluirCronogramaQuandoCronogramaNaoPossuirTarefasEPossuirUltimaSelecaoTest()
        {
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1", CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução, CsPadraoSistema.Sim, true);

            Cronograma cronograma1 = CronogramaFactoryEntity.CriarCronograma(contexto, "Cronograma 01", situacaoPlanejamento, new DateTime(), new DateTime(), true);

            User usuario = CronogramaFactoryEntity.CriarUsuario(contexto, "anderson.lins", "Anderson", "Lins", "*****@*****.**", true);

            CronogramaUltimaSelecao ultimaSelecao = new CronogramaUltimaSelecao();

            ultimaSelecao.DataAcesso          = DateTime.Now;
            ultimaSelecao.Usuario             = usuario;
            ultimaSelecao.OidUltimoCronograma = cronograma1.Oid;
            ultimaSelecao.Cronograma          = cronograma1;

            bool cronogramaExcluido = CronogramaBo.ExcluirCronograma(contexto, cronograma1.Oid);

            Assert.IsTrue(cronogramaExcluido, "Deveria ser verdadeiro, pois o cronograma não possui tarefas associadas a ele.");
        }
        public void ExcluirCronogramaQuandoCronogramaPossuirTarefasEUltimaSelecaoParaUmUsuarioTest()
        {
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1", CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução, CsPadraoSistema.Sim, true);

            Cronograma cronograma1 = CronogramaFactoryEntity.CriarCronograma(contexto, "Cronograma 01", situacaoPlanejamento, new DateTime(), new DateTime(), true);

            Colaborador colaborador = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", new DateTime(), "*****@*****.**", "Anderson", "", "Lins", "anderson.lins", null, true);

            CronogramaTarefa cronogramaTarefa = CronogramaFactoryEntity.CriarTarefa(contexto, 1, "Tarefa 01", "", situacaoPlanejamento, 0, new TimeSpan(), colaborador, cronograma1, null, true);

            CronogramaUltimaSelecao ultimaSelecao = new CronogramaUltimaSelecao();

            ultimaSelecao.DataAcesso          = DateTime.Now;
            ultimaSelecao.Usuario             = colaborador.Usuario;
            ultimaSelecao.OidUltimoCronograma = cronograma1.Oid;
            ultimaSelecao.Cronograma          = cronograma1;

            bool cronogramaExcluido = CronogramaBo.ExcluirCronograma(contexto, cronograma1.Oid);

            Assert.IsTrue(cronogramaExcluido, "Deveria ser true, pois o cronograma exclui quaisquer tarefas associadas a ele.");
        }
        /// <summary>
        /// Método que busca o último cronograma selecionado pelo usuário.
        /// </summary>
        /// <param name="contexto">contexto do banco</param>
        /// <param name="login">Login do usuário</param>
        /// <returns>Objeto Cronograma que representa o último selecionado</returns>
        public static Cronograma ConsultarUltimoCronogramaSelecionado(WexDb contexto, string login)
        {
            if (contexto == null || login == null)
            {
                throw new ArgumentException("Os parâmetros session e login usuário não podem ser nulos.");
            }

            CronogramaUltimaSelecao ultimaSelecao = contexto.CronogramaUltimaSelecao.Include(o => o.Cronograma).Include(o => o.Cronograma.SituacaoPlanejamento).Include(o => o.Usuario).FirstOrDefault(o => o.Usuario.UserName == login);

            if (ultimaSelecao == null)
            {
                return(null);
            }

            if (ultimaSelecao.Cronograma == null || ultimaSelecao.Cronograma.CsExcluido)
            {
                return(null);
            }

            return(ultimaSelecao.Cronograma);
        }