/// <summary>
        /// Método responsável por editar os dados de um cronograma
        /// </summary>
        /// <param name="cronogramaDto">dados do cronograma editado</param>
        /// <returns>verdadeiro caso tenha sido editado e falso caso contrário</returns>
        public static bool EditarCronograma(CronogramaDto cronogramaDto)
        {
            if (cronogramaDto == null || cronogramaDto.Oid == new Guid())
            {
                return(false);
            }

            var cronograma = CronogramaDao.ConsultarCronogramaPorOid(cronogramaDto.Oid, o => o.SituacaoPlanejamento.Cronogramas);

            if (cronograma == null)
            {
                return(false);
            }

            var dtoCronogramaBaseDados = CronogramaBo.DtoFactory(cronograma);

            if (ComparadorGenerico.HouveMudancaEm(dtoCronogramaBaseDados, cronogramaDto, o => o.TxDescricao))
            {
                return(AlterarDescricaoCronograma(cronogramaDto.Oid, cronogramaDto.TxDescricao));
            }

            if (!ValidarDatasCronograma(cronogramaDto) || !ComparadorGenerico.HouveMudancaEm(dtoCronogramaBaseDados, cronogramaDto, o => o.OidSituacaoPlanejamento, o => o.DtInicio, o => o.DtFinal))
            {
                return(false);
            }

            AtualizarDadosCronograma(cronograma, cronogramaDto);
            return(CronogramaDao.SalvarCronograma(cronograma));
        }
        /// <summary>
        /// Método responsável por efetuar alteração na descrição do cronograma
        /// </summary>
        /// <param name="oidCronograma"> oid do cronograma que terá o nome alterado</param>
        /// <param name="novaDescricaoCronograma">novo nome do cronograma</param>
        public static bool AlterarDescricaoCronograma(Guid oidCronograma, string novaDescricaoCronograma)
        {
            if (oidCronograma == new Guid())
            {
                throw new ArgumentException("Erro de argumento, a oidCronograma não pode ser nulo");
            }

            if (string.IsNullOrEmpty(novaDescricaoCronograma))
            {
                throw new ArgumentException("Erro de argumento, a descrição da tarefa não pode ser nula");
            }

            Cronograma cronogramaSelecionado = CronogramaDao.ConsultarCronogramaPorOid(oidCronograma, o => o.SituacaoPlanejamento);

            if (cronogramaSelecionado == null)
            {
                return(false);
            }

            semaforoAlteracaoNomeCronograma.WaitOne();

            string descricaoValida = ValidarDescricaoCronograma(novaDescricaoCronograma);

            using (WexDb contexto = ContextFactoryManager.CriarWexDb())
            {
                bool cronogramaComMesmoNome = contexto.Cronograma.Existe(o => o.TxDescricao == descricaoValida && !o.CsExcluido);

                if (cronogramaComMesmoNome)
                {
                    semaforoAlteracaoNomeCronograma.Release();
                    return(false);
                }

                cronogramaSelecionado.TxDescricao = descricaoValida;
                contexto.Cronograma.Attach(cronogramaSelecionado);
                contexto.Entry(cronogramaSelecionado).State = EntityState.Modified;
                contexto.Entry(cronogramaSelecionado.SituacaoPlanejamento).State = EntityState.Unchanged;
                contexto.SaveChanges();
                semaforoAlteracaoNomeCronograma.Release();
                return(true);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Método responsável por realizar os cálculos necessários para formar o gráfico de Burndown
        /// </summary>
        /// <returns>Lista contendo os dados calculados que formam o gráfico</returns>
        public BurndownGraficoDto CalcularDadosGraficoBurndown(Guid oidCronograma)
        {
            List <BurndownDadosDto> dadosGrafico = new List <BurndownDadosDto>();

            Cronograma cronograma = CronogramaDao.ConsultarCronogramaPorOid(oidCronograma, o => o.CronogramaTarefas);

            var diasUteis = CalendarioBo.CalcularDiasUteis(cronograma.DtInicio, cronograma.DtFinal);

            double totalHorasCronograma = TarefaHistoricoEstimativaDao.ConsultarTotalHorasPlanejadasCronograma(oidCronograma);

            totalHorasCronograma = totalHorasCronograma.ToTimeSpan().TotalHours;

            double cargaDiaria    = DividirCargaHoraria(totalHorasCronograma, diasUteis.Count - 1);
            double horasRestantes = totalHorasCronograma;

            diasUteis.ForEach(data => dadosGrafico.Add(CriarDtoPlanejamentoGraficoBurndown(cargaDiaria, ref horasRestantes, data)));

            var somatorios = TarefaHistoricoEstimativaDao.ConsultarTotalHorasRealizadasCronograma(oidCronograma, cronograma.DtInicio, cronograma.DtFinal);

            if (somatorios.Count > 0)
            {
                diasUteis = diasUteis.Union(somatorios.Keys.Where(o => o.Date <= DateUtil.ConsultarDataHoraAtual().Date)).OrderBy(o => o).ToList();
                var ultimaEstimativa     = somatorios.LastOrDefault();
                var dataUltimaEstimativa = ultimaEstimativa.Key.AddDays(1);
                var somaUltimaEstimativa = ultimaEstimativa.Value;

                while (dataUltimaEstimativa.Date <= cronograma.DtFinal && dataUltimaEstimativa.Date <= DateUtil.ConsultarDataHoraAtual().Date)
                {
                    if (diasUteis.Any(o => o.Date.Equals(dataUltimaEstimativa) && o.Date <= DateUtil.ConsultarDataHoraAtual().Date))
                    {
                        somatorios.Add(dataUltimaEstimativa, somaUltimaEstimativa);
                    }
                    dataUltimaEstimativa = dataUltimaEstimativa.AddDays(1);
                }
                dadosGrafico.AddRange(CriarDtoRealizadoGraficoBurndown(somatorios));
            }
            double desvio = CalcularDesvio(dadosGrafico);

            return(new BurndownGraficoDto {
                DadosBurndown = dadosGrafico, Desvio = desvio
            });
        }
        /// <summary>
        /// Método responsável por buscar um cronograma pelo nome.
        /// </summary>
        /// <param name="session">Sessão Corrente</param>
        /// <param name="txDescricaoCronograma">Nome do Cronograma</param>
        /// <returns>Objeto cronograma</returns>
        public static CronogramaDto ConsultarCronogramaPorOidDto(Guid oidCronograma)
        {
            CronogramaDto cronogramaDto = new CronogramaDto();

            Cronograma cronograma = CronogramaDao.ConsultarCronogramaPorOid(oidCronograma, o => o.SituacaoPlanejamento);

            if (cronograma != null)
            {
                cronogramaDto.Oid = cronograma.Oid;
                cronogramaDto.OidSituacaoPlanejamento         = cronograma.OidSituacaoPlanejamento;
                cronogramaDto.TxDescricao                     = cronograma.TxDescricao;
                cronogramaDto.TxDescricaoSituacaoPlanejamento = cronograma.SituacaoPlanejamento.TxDescricao;
                cronogramaDto.DtInicio = (DateTime)cronograma.DtInicio;
                cronogramaDto.DtFinal  = (DateTime)cronograma.DtFinal;

                return(cronogramaDto);
            }

            return(null);
        }