public void GivenQueOCiclo1DoProjetoProjeto01EstejaComSituacaoEmAndamentoComAsEstorias(string numCiclo, string projeto, string situacaoCiclo, Table table)
        {
            CicloDesenv ciclo = StepProjeto.ProjetosDic[projeto].Ciclos[(int.Parse(numCiclo)) - 1];

            ciclo.CsSituacaoCiclo = SituacaoCicloByText(situacaoCiclo);
            ciclo.Save();

            for (int position = 0; position < table.RowCount; position++)
            {
                string             estoria         = table.Rows[position][table.Header.ToList()[0]];
                string             situacaoEstoria = table.Rows[position][table.Header.ToList()[1]];
                Estoria            est             = StepEstoria.EstoriasDic[estoria];
                CicloDesenvEstoria estoriaCiclo    = CicloDesenvEstoriaFactory.Criar(SessionTest, ciclo, est, situacaoEstoria, true);
            }
            ciclo.Save();
        }
        public void EntaoOCampoDataDeInicioDoProximoCicloNaoDeveSerExibidoNoCancelamentoDoCicloCiclo01(string ciclo)
        {
            CicloDesenv cicloObj = ciclosDic[ciclo];

            cicloObj.CsSituacaoCiclo = CsSituacaoCicloDomain.Cancelado;
            cicloObj.Save();

            Assert.IsFalse(StepCiclo.ciclosDic[ciclo].RnMostrarInicioProximoCiclo(), "Não deveria mostrar o 'inicio do próximo ciclo'");
        }
        /// <summary>
        /// Criar o Ciclo e as Estórias do Ciclo
        /// </summary>
        /// <param name="ciclo">Valor texto do Ciclo</param>
        /// <param name="estorias">Lista valores texto de Estórias do Ciclo</param>
        public static void CriarCicloEstoriasCiclo(Projeto projeto, string ciclo, List <string> estorias, Session session, ushort position = 1)
        {
            // Inserindo no dicionário
            if (!ciclosDic.ContainsKey(ciclo))
            {
                CicloDesenv cicloObj = CicloFactory.Criar(session, projeto, ciclo);
                cicloObj.NbCiclo = position;
                cicloObj.Save();

                ciclosDic.Add(ciclo, cicloObj);
            }

            foreach (string estoria in estorias)
            {
                string[] dados = estoria.Split(';');

                if (dados.Count() != 2)
                {
                    new Exception("O título e a situação da Estória devem vir separados por ';'");
                }

                string titulo   = dados[0]; // Título da Estória
                string situacao = dados[1]; // Situação da Estória

                // Se a chave já existir, continua o método
                if (estoriasDic.ContainsKey(titulo))
                {
                    continue;
                }

                Modulo      modulo      = ModuloFactory.Criar(session, projeto, string.Format("modulo - {0}", ciclo), true);
                Beneficiado beneficiado = BeneficiadoFactory.Criar(session, string.Format("beneficiado - {0}", ciclo), true);
                Estoria     estoriaObj  = EstoriaFactory.Criar(session, modulo, titulo, "gostaria de",
                                                               "então poderei", beneficiado, "observações", "referências", "dúvidas", true);

                estoriaObj.TxTitulo = titulo;
                estoriaObj.Save();

                // Estória no Ciclo
                CicloDesenvEstoria estoriaCiclo = CicloDesenvEstoriaFactory.Criar(session, ciclosDic[ciclo], estoriaObj, true);
                estoriaCiclo.CsSituacao = SituacaoEstoriaCicloByText(situacao);
                estoriaCiclo.Save();

                // Inserindo no dicionário
                estoriasDic.Add(titulo, estoriaCiclo);
            }

            ciclosDic[ciclo].IsExibirJanelaDestinoItensPendentes();
        }
        /// <summary>
        /// método criar
        /// </summary>
        /// <param name="session">session</param>
        /// <param name="projeto">Projeto</param>
        /// <param name="txMeta">String</param>
        /// <param name="save">bool</param>
        /// <returns>ciclo</returns>
        public static CicloDesenv Criar(Session session, Projeto projeto, string txMeta = "", bool save = false)
        {
            CicloDesenv ciclo = new CicloDesenv(session);

            if (String.IsNullOrEmpty(txMeta))
            {
                ciclo.TxMeta = GetDescricao();
            }

            ciclo.Projeto = projeto;

            if (save)
            {
                ciclo.Save();
            }

            return(ciclo);
        }
        public void DadoCicloNumaCertaSituacaoComDataDeInicioEmUmCertoDiaEDataDeTerminoEmUmCertoDia(string ciclo, string situacao, string data_inicio, string data_final)
        {
            CicloDesenv Ciclo = ciclosDic[ciclo];

            CsSituacaoCicloDomain situacaoCS;

            if (situacao.Split('-').Length == 1)
            {
                situacaoCS = SituacaoCicloByText(situacao);
            }
            else
            {
                situacaoCS = CsSituacaoCicloDomain.Cancelado;
                Ciclo.MotivoCancelamento = new MotivoCancelamento(SessionTest)
                {
                    TxDescricao = situacao.Split('-')[1].Trim()
                };
            }

            Ciclo.CsSituacaoCiclo = situacaoCS;
            Ciclo.DtInicio        = DateTime.Parse(data_inicio);
            Ciclo.DtTermino       = DateTime.Parse(data_final);
            Ciclo.Save();
        }
        /// <summary>
        /// Regra de negócio que calcula a dataHora de término real do projeto
        /// </summary>
        public void RnCalcularTerminoReal()
        {
            if (projetoOld != null && (projetoOld.DtInicioReal == DtInicioReal &&
                                       projetoOld.NbCicloTotalPlan == NbCicloTotalPlan &&
                                       projetoOld.NbCicloDuracaoDiasPlan == NbCicloDuracaoDiasPlan &&
                                       projetoOld.NbCicloDiasIntervalo == NbCicloDiasIntervalo))
            {
                return;
            }

            if (DtInicioReal != DateTime.MinValue)
            {
                DateTime dtInicio = DtInicioReal;
                _DtTerminoReal = dtInicio.AddDays(-1);
                for (int nbCiclo = 1; nbCiclo <= NbCicloTotalPlan; nbCiclo++)
                {
                    int dia = 1;
                    try
                    {
                        Ciclos.Sorting.Add(new SortProperty("NbCiclo", SortingDirection.Ascending));

                        if (Ciclos.Count > 0 && DtInicioReal != oldDate)
                        {
                            VerificarSeOCicloEstaConcluido(Ciclos[0].CsSituacaoCiclo);
                        }

                        //Metodo que verifica as datas de inicio e final do ultimo ciclo setado como concluído ou cancelado
                        if (nbCiclo == 1)
                        {
                            foreach (CicloDesenv item in Ciclos)
                            {
                                if (item.CsSituacaoCiclo == CsSituacaoCicloDomain.Concluido || item.CsSituacaoCiclo == CsSituacaoCicloDomain.Cancelado)
                                {
                                    DateTime verificarItemDataTermino = item.DtTermino.AddDays(NbCicloDiasIntervalo);

                                    do
                                    {
                                        verificarItemDataTermino = verificarItemDataTermino.AddDays(1);

                                        if (Calendario.IsDiaUtil(Session, verificarItemDataTermino))
                                        {
                                            dtInicio       = verificarItemDataTermino;
                                            _DtTerminoReal = verificarItemDataTermino.AddDays(-1);
                                        }
                                    }while (!Calendario.IsDiaUtil(Session, verificarItemDataTermino));
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }

                        //Metodo que faz os calculos das datas
                        if (Ciclos.Count < nbCiclo || (Ciclos.Count >= nbCiclo && Ciclos[nbCiclo - 1].CsSituacaoCiclo != CsSituacaoCicloDomain.Concluido && Ciclos[nbCiclo - 1].CsSituacaoCiclo != CsSituacaoCicloDomain.Cancelado))
                        {
                            do
                            {
                                _DtTerminoReal = _DtTerminoReal.AddDays(1);
                                if (Calendario.IsDiaUtil(Session, _DtTerminoReal))
                                {
                                    dia += 1;
                                }
                            }while (dia <= NbCicloDuracaoDiasPlan);


                            if (nbCiclo > CicloDesenv.GetUltimoCiclo(this))
                            {
                                if (IsSaving)
                                {
                                    CicloDesenv ciclos = new CicloDesenv(Session)
                                    {
                                        Projeto = this, NbCiclo = nbCiclo, DtInicio = dtInicio, DtTermino = _DtTerminoReal
                                    };
                                    ciclos.Save();
                                }
                            }
                            else
                            {
                                Ciclos[nbCiclo - 1].DtInicio  = dtInicio;
                                Ciclos[nbCiclo - 1].DtTermino = _DtTerminoReal;
                            }

                            dia = 1;

                            if (nbCiclo < NbCicloTotalPlan)
                            {
                                int cont = 0;

                                do
                                {
                                    _DtTerminoReal = _DtTerminoReal.AddDays(1);
                                    if (Calendario.IsDiaUtil(Session, dtTermino))
                                    {
                                        dia += 1;
                                    }
                                }while (dia <= NbCicloDiasIntervalo);

                                dtInicio = _DtTerminoReal;

                                do
                                {
                                    dtInicio = dtInicio.AddDays(1);
                                    if (Calendario.IsDiaUtil(Session, dtInicio))
                                    {
                                        cont = 1;
                                    }
                                }while (cont == 0);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Já existe um ciclo concluído");
                        break;
                    }
                }

                if (NbCicloTotalPlan < nbCicloTotalPlanOld && verificacaoValida)
                {
                    if (NbCicloTotalPlan < CicloDesenv.GetUltimoCiclo(this))
                    {
                        Ciclos.Sorting.Add(new SortProperty("NbCiclo", SortingDirection.Ascending));
                        ArrayList lista = new ArrayList(Ciclos);

                        foreach (CicloDesenv item in lista)
                        {
                            if (item.NbCiclo > NbCicloTotalPlan && (item.CsSituacaoCiclo != CsSituacaoCicloDomain.Cancelado && item.CsSituacaoCiclo != CsSituacaoCicloDomain.Concluido))
                            {
                                item.Delete();
                            }
                        }
                    }

                    verificacaoValida = false;
                }
            }
            else
            if (DtInicioReal == DateTime.MinValue && DtTerminoPlan != DateTime.MinValue)
            {
                dtTermino = DtTerminoPlan;
            }
        }