public void ExcluirTarefaQuandoNaoExistirTarefaParaExcluir()
        {
            //cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1",
                                                                                                          CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução,
                                                                                                          CsPadraoSistema.Sim, true);

            Colaborador colaborador1 = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", true);

            string responsaveis = colaborador1.NomeCompleto;

            //iníco tarefa
            DateTime dtInicio = new DateTime();

            //cria tarefa
            Tarefa tarefa = new Tarefa();

            tarefa = TarefaBo.CriarTarefa((string)"Tarefa 01", situacaoPlanejamento, dtInicio, colaborador1.Usuario.UserName, (string)"Criar método", responsaveis, 3);

            List <Guid> oidTarefas = new List <Guid>();

            oidTarefas.Add(tarefa.Oid);

            List <Guid> oidTarefasExcluidas = new List <Guid>();

            TarefaBo.ExcluirTarefa(contexto, oidTarefas);

            oidTarefasExcluidas = TarefaBo.ExcluirTarefa(contexto, oidTarefas);

            Tarefa tarefaExcluida = TarefaDao.ConsultarTarefaPorOid(tarefa.Oid);

            Assert.AreEqual(0, oidTarefasExcluidas.Count, "Não deve existir nenhuma tarefa na lista, pois nenhuma tarefa foi deletada (pois a tarefa já estava deletada)");
            Assert.IsNull(tarefaExcluida, "Deveria ser nulo, pois a tarefa deveria ter sido excluida.");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Método responsável por criar um histórico para uma determinada tarefa.
        /// </summary>
        ///
        /// <param name="oidTarefa">Oid da Tarefa</param>
        /// <param name="login">Login do usuário</param>
        /// <param name="nbHoraRealizado">Horas realizadas na atividade.</param>
        /// <param name="dtRealizado">Data de realização da atividade.</param>
        /// <param name="nbHoraInicial">Hora Inicial da atividade</param>
        /// <param name="nbHoraFinal">Hora Final da atividade</param>
        /// <param name="txComentario">Comentário da atividade</param>
        /// <param name="nbHoraRestante">Horas restantes da atividade</param>
        /// <param name="oidSituacaoPlanejamento">Oid da Situação Planejamento da atividade</param>
        /// <param name="txJustificativaReducao">Justificativa de redução da atividade</param>
        public static void CriarHistoricoTarefa(Guid oidTarefa, string login, TimeSpan nbHoraRealizado, DateTime dtRealizado, TimeSpan nbHoraInicial, TimeSpan nbHoraFinal, string txComentario, TimeSpan nbHoraRestante, Guid oidSituacaoPlanejamento, string txJustificativaReducao)
        {
            if (oidTarefa == new Guid() || String.IsNullOrEmpty(login))
            {
                throw new ArgumentException("Os parâmetros Login e OidTarefa não podem ser nulos.");
            }

            TarefaHistoricoTrabalho historico = new TarefaHistoricoTrabalho();
            Tarefa      tarefa      = TarefaDao.ConsultarTarefaPorOid(oidTarefa);
            Colaborador colaborador = ColaboradorDAO.ConsultarColaborador(login, o => o.Usuario.Person);

            if (tarefa == null)
            {
                return;
            }

            SituacaoPlanejamento situacaoPlanejamento = SituacaoPlanejamentoDAO.ConsultarSituacaoPlanejamentoPorOid(oidSituacaoPlanejamento);

            if (tarefa.NbEstimativaInicial <= 0 && (situacaoPlanejamento.CsTipo == CsTipoPlanejamento.Cancelamento || situacaoPlanejamento.CsTipo == CsTipoPlanejamento.Planejamento))
            {
                TarefaBo.AtualizarDadosTarefa(tarefa.Oid, colaborador, situacaoPlanejamento, nbHoraRealizado, nbHoraRestante, tarefa.CsLinhaBaseSalva);
                return;
            }
            // Caso não possua estimativa inicial não deve salvar historico da tarefa
            if (tarefa.NbEstimativaInicial <= 0 && situacaoPlanejamento.CsTipo != CsTipoPlanejamento.Impedimento)
            {
                throw new EstimativaInicialInvalidaException("Histórico da Tarefa não pode ser salvo, pois não foi estimado um tempo inicial para realização da tarefa");
            }

            if (!tarefa.CsLinhaBaseSalva)
            {
                TarefaBo.SalvarLinhaBaseTarefa(tarefa);
            }

            historico.OidTarefa               = tarefa.Oid;
            historico.HoraRealizado           = nbHoraRealizado;
            historico.DtRealizado             = dtRealizado;
            historico.HoraInicio              = nbHoraInicial;
            historico.HoraFinal               = nbHoraFinal;
            historico.TxComentario            = txComentario;
            historico.HoraRestante            = nbHoraRestante;
            historico.TxJustificativaReducao  = txJustificativaReducao;
            historico.OidColaborador          = colaborador.Oid;
            historico.OidSituacaoPlanejamento = situacaoPlanejamento.Oid;
            historico.TxComentario            = txComentario;
            historico.TxJustificativaReducao  = txJustificativaReducao;

            using (WexDb contexto = ContextFactoryManager.CriarWexDb())
            {
                contexto.TarefaHistoricoTrabalho.Add(historico);
                contexto.SaveChanges();
            }

            //Atualiza os dados da tarefa a partir dos dados salvos no histórico.
            TarefaBo.AtualizarDadosTarefa(tarefa.Oid, colaborador, situacaoPlanejamento, historico.HoraRealizado, historico.HoraRestante, tarefa.CsLinhaBaseSalva);
        }
        public void ExcluirTarefaQuandoExistirHistoricoELogAlteracao()
        {
            //cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1",
                                                                                                          CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução,
                                                                                                          CsPadraoSistema.Sim, true);

            Colaborador colaborador1 = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", true);

            string responsaveis = colaborador1.NomeCompleto;

            //iníco tarefa
            DateTime dtInicio = new DateTime();

            //cria tarefa
            Tarefa tarefa = new Tarefa();

            tarefa = TarefaBo.CriarTarefa((string)"Tarefa 01", situacaoPlanejamento, dtInicio, colaborador1.Usuario.UserName, (string)"Criar método", responsaveis, 3);

            TarefaHistoricoTrabalho tarefaHistorico = new TarefaHistoricoTrabalho();

            tarefaHistorico.OidTarefa      = tarefa.Oid;
            tarefaHistorico.OidColaborador = colaborador1.Oid;
            tarefaHistorico.DtRealizado    = DateTime.Now;
            tarefaHistorico.HoraFinal      = new TimeSpan(10, 0, 0);
            tarefaHistorico.HoraInicio     = new TimeSpan(5, 0, 0);
            tarefaHistorico.HoraRealizado  = new TimeSpan(4, 0, 0);
            tarefaHistorico.HoraRestante   = new TimeSpan(6, 0, 0);
            tarefaHistorico.TxComentario   = "Comentario";

            contexto.TarefaHistoricoTrabalho.Add(tarefaHistorico);
            contexto.SaveChanges();

            List <Guid> oidTarefas = new List <Guid>();

            oidTarefas.Add(tarefa.Oid);

            List <Guid> oidTarefasExcluidas = new List <Guid>();

            oidTarefasExcluidas = TarefaBo.ExcluirTarefa(contexto, oidTarefas);

            Tarefa tarefaExcluida = TarefaDao.ConsultarTarefaPorOid(tarefa.Oid);

            TarefaHistoricoTrabalho tarefaHistoricoExcluido = contexto.TarefaHistoricoTrabalho.FirstOrDefault(o => o.OidTarefa == tarefa.Oid);

            TarefaLogAlteracao tarefaLogExcluido = contexto.TarefaLogAlteracao.FirstOrDefault(o => o.OidTarefa == tarefa.Oid);

            Assert.AreEqual(1, oidTarefasExcluidas.Count, "Deve ter excluido uma tarefa");
            Assert.AreEqual(tarefa.Oid, oidTarefasExcluidas[0], "Deve ter excluido a tarefa com este oid");
            Assert.IsNull(tarefaExcluida, "Deveria ser nulo, pois a tarefa deveria ter sido excluida.");
            Assert.IsNotNull(tarefaHistoricoExcluido, "Não deveria ser nulo, pois a tarefa deveria ter sido excluida, mas o historico permanece.");
            Assert.IsNotNull(tarefaLogExcluido, "Não deveria ser nulo, pois a tarefa deveria ter sido excluida, mas o Log permanece.");
        }
        public void AtualizarDadosTarefaQuandoJáExistirColaboradorNaListaDeResponsaveisTest()
        {
            //Cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamentoNaoIniciado = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "Não Iniciado",
                                                                                                                     CsTipoSituacaoPlanejamento.Ativo,
                                                                                                                     CsTipoPlanejamento.Execução,
                                                                                                                     CsPadraoSistema.Não, true);

            //Cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamentoEmAndamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "Em Andamento",
                                                                                                                     CsTipoSituacaoPlanejamento.Ativo,
                                                                                                                     CsTipoPlanejamento.Execução,
                                                                                                                     CsPadraoSistema.Não, true);

            Colaborador colaborador1 = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", true);


            string responsaveis = String.Format("{0}", colaborador1.NomeCompleto);


            //iníco tarefa
            DateTime dtInicio = new DateTime();

            //cria tarefa
            Tarefa tarefa1 = new Tarefa();

            tarefa1 = TarefaBo.CriarTarefa("Tarefa 01", situacaoPlanejamentoNaoIniciado, dtInicio, colaborador1.Usuario.UserName, "Criar método1", responsaveis, 5);

            //busca tarefa criada
            Tarefa tarefaCriada = TarefaDao.ConsultarTarefaPorOid(tarefa1.Oid, o => o.SituacaoPlanejamento);

            //simulando passagem de parâmetros ao criar um histórico.
            TarefaBo.AtualizarDadosTarefa(tarefaCriada.Oid, colaborador1, situacaoPlanejamentoEmAndamento, new TimeSpan(3, 0, 0), new TimeSpan(2, 0, 0), tarefaCriada.CsLinhaBaseSalva);

            Tarefa        tarefaAlterada     = TarefaDao.ConsultarTarefaPorOid(tarefaCriada.Oid, o => o.SituacaoPlanejamento);
            List <string> responsaveisTarefa = new List <string>(tarefaAlterada.TxResponsaveis.Split(','));

            //Responsável Tarefa
            Assert.AreEqual(1, responsaveisTarefa.Count, "Deveria ter um responsável, pois foi adicionado apenas 1 colaborador pela tarefa.");
            Assert.AreEqual(colaborador1.NomeCompleto, responsaveisTarefa.First(), "Deveriam ser iguais, pois é o único cadastrado.");

            //Situacao Planejamento
            Assert.AreEqual(tarefaAlterada.OidSituacaoPlanejamento, situacaoPlanejamentoEmAndamento.Oid, "Deveria ser o mesmo Oid, pois a tarefa foi alterada para Em Andamento.");

            //Estimativas
            Assert.AreEqual(new TimeSpan(2, 0, 0), tarefaAlterada.NbEstimativaRestante.ToTimeSpan(), "Deveriam ser iguais, pois a tarefa possui 5 horas de estimativa inicial e foram realizadas 3 horas, então sobram 2");
            Assert.AreEqual(new TimeSpan(3, 0, 0), tarefaAlterada.NbRealizado.ToTimeSpan(), "Deveria ser 3 horas, pois foram realizadas 3 horas na tarefa e o historico foi salvo.");
        }
        public void EditarTarefaQuandoSalvarLinhaBaseTarefaTest()
        {
            //cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1",
                                                                                                          CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução,
                                                                                                          CsPadraoSistema.Sim, true);

            Cronograma cronogramaPadrao1 = CronogramaBo.CriarCronogramaPadrao(contexto);

            Colaborador colaborador1 = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", true);

            string responsaveis = colaborador1.NomeCompleto;

            //iníco tarefa
            DateTime dataInicio = DateTime.Now;

            List <CronogramaTarefa> tarefasImpactadas;
            DateTime         dataHoraAcao = new DateTime();
            CronogramaTarefa novaTarefa   = CronogramaTarefaBo.CriarCronogramaTarefa(cronogramaPadrao1.Oid, (string)"Tarefa 01", situacaoPlanejamento, dataInicio, responsaveis, colaborador1.Usuario.UserName, out tarefasImpactadas, ref dataHoraAcao, (string)"Criar método", 3, 0);

            //busca tarefa criada
            CronogramaTarefa tarefaCriada = CronogramaTarefaDao.ConsultarCronogramaTarefaPorOid(novaTarefa.Oid, o => o.Tarefa.SituacaoPlanejamento, o => o.Cronograma, o => o.Tarefa.AtualizadoPor.Usuario.Person, o => o.Tarefa);

            bool salvarLinhaBaseTarefa = true;

            TimeSpan estimativaRestante = TarefaDao.ConsultarTarefaPorOid((Guid)tarefaCriada.OidTarefa).EstimativaRestanteHora;

            string responsaveisTarefaEdicao = colaborador1.NomeCompleto;

            TarefaBo.EditarTarefa(tarefaCriada.Oid.ToString(), tarefaCriada.Tarefa.TxDescricao, tarefaCriada.Tarefa.SituacaoPlanejamento.Oid.ToString(), colaborador1.Usuario.UserName,
                                  tarefaCriada.Tarefa.TxObservacao, responsaveisTarefaEdicao, tarefaCriada.Tarefa.NbEstimativaInicial, estimativaRestante, new TimeSpan(0), salvarLinhaBaseTarefa, dataInicio);

            //busca tarefa criada
            CronogramaTarefa tarefaAlterada = CronogramaTarefaDao.ConsultarCronogramaTarefaPorOid(tarefaCriada.Oid, o => o.Tarefa.SituacaoPlanejamento, o => o.Cronograma, o => o.Tarefa.AtualizadoPor.Usuario.Person, o => o.Tarefa.LogsAlteracao, o => o.Tarefa.TarefaHistoricoTrabalhos, o => o.Tarefa.TarefaResponsaveis);

            Assert.AreEqual(salvarLinhaBaseTarefa, tarefaAlterada.Tarefa.CsLinhaBaseSalva, "Deveria ter salvo a linha de base");
            Assert.AreEqual(estimativaRestante, tarefaAlterada.Tarefa.NbEstimativaRestante.ToTimeSpan(), "Deveria ter mudado a estimativa restando, pois salvou a linha de base");
        }
        public void CriarTarefaQuandoCriarLogPrimeiraVezTest()
        {
            //cria situação planejamento
            SituacaoPlanejamento situacaoPlanejamento = CronogramaFactoryEntity.CriarSituacaoPlanejamento(contexto, "S1",
                                                                                                          CsTipoSituacaoPlanejamento.Ativo, CsTipoPlanejamento.Execução,
                                                                                                          CsPadraoSistema.Sim, true);

            Colaborador colaborador1 = ColaboradorFactoryEntity.CriarColaborador(contexto, "anderson.lins", true);

            string responsaveis = colaborador1.NomeCompleto;

            //iníco tarefa
            DateTime dtInicio = new DateTime();

            //cria tarefa
            Tarefa tarefa = new Tarefa();

            tarefa = TarefaBo.CriarTarefa((string)"Tarefa 01", situacaoPlanejamento, dtInicio, colaborador1.Usuario.UserName, (string)"Criar método", responsaveis, 3);

            DateUtil.CurrentDateTime = (DateTime)tarefa.DtAtualizadoEm;

            Assert.AreEqual(DateUtil.CurrentDateTime, tarefa.DtAtualizadoEm);
            Assert.AreEqual(colaborador1.NomeCompleto, TarefaDao.ConsultarTarefaPorOid(tarefa.Oid, o => o.AtualizadoPor.Usuario.Person).AtualizadoPor.NomeCompleto);
        }
        /// <summary>
        /// Método responsável por, atribuir um colaborador à tarefa, caso ele não esteja como responsável pela mesma,
        /// atualizar a situação planejamento da tarefa e atualizar as estimativas da tarefa.
        /// </summary>
        /// <param name="oidTarefa">oid da tarefa</param>
        /// <param name="colaborador">Objeto Colaborador</param>
        /// <param name="situacaoPlanejamento">Objeto Situação Planejamento</param>
        /// <param name="nbHoraRealizado">Hora realizado da atividade</param>
        /// <param name="nbHoraRestante">Hora restante da atividade</param>
        public static void AtualizarDadosTarefa(Guid oidTarefa, Colaborador colaborador, SituacaoPlanejamento situacaoPlanejamento, TimeSpan nbHoraRealizado, TimeSpan nbHoraRestante, bool CsLinhaBaseSalva)
        {
            if (oidTarefa == null || oidTarefa == new Guid())
            {
                throw new ArgumentException("O parâmetro oidTarefa é  inválido");
            }

            using (WexDb contexto = ContextFactoryManager.CriarWexDb())
            {
                Tarefa tarefa = TarefaDao.ConsultarTarefaPorOid(oidTarefa);

                if (tarefa == null)
                {
                    return;
                }
                //Atualiza a situação planejamento da tarefa e estimativas
                if (situacaoPlanejamento != null && !tarefa.OidSituacaoPlanejamento.Equals(situacaoPlanejamento.Oid))
                {
                    tarefa.SituacaoPlanejamento    = null;
                    tarefa.OidSituacaoPlanejamento = situacaoPlanejamento.Oid;
                }

                if (colaborador != null && !tarefa.OidAtualizadoPor.Equals(colaborador.Oid))
                {
                    tarefa.AtualizadoPor    = null;
                    tarefa.OidAtualizadoPor = colaborador.Oid;
                }
                EstimarHorasRestantesSugeridaPorTipoSituacaoPlanejamento(tarefa, nbHoraRestante.Ticks, situacaoPlanejamento, true);
                tarefa.EstimativaRealizadoHora += nbHoraRealizado;
                tarefa.DtAtualizadoEm           = DateUtil.ConsultarDataHoraAtual();
                tarefa.CsLinhaBaseSalva         = CsLinhaBaseSalva;

                //Atualiza responsáveis tarefa
                if (nbHoraRealizado.Ticks > 0)
                {
                    if (!String.IsNullOrEmpty(tarefa.TxResponsaveis) || !String.IsNullOrWhiteSpace(tarefa.TxResponsaveis))
                    {
                        List <string> ResponsaveisTarefa = new List <string>(tarefa.TxResponsaveis.Split(','));

                        if (colaborador != null)
                        {
                            if (!ResponsaveisTarefa.Contains(colaborador.NomeCompleto))
                            {
                                tarefa.TxResponsaveis += "," + colaborador.NomeCompleto;
                            }
                        }
                    }
                    else
                    {
                        tarefa.TxResponsaveis += colaborador.NomeCompleto;
                    }
                }

                contexto.Tarefa.Attach(tarefa);
                contexto.Entry(tarefa).State = EntityState.Modified;

                contexto.SaveChanges();

                TarefaHistoricoEstimativaBo.CriarHistorico(DateUtil.ConsultarDataHoraAtual(), tarefa.Oid, tarefa.NbEstimativaRestante);
            }
        }