public ActionResult ExecutaEncadeamento(string qtd)
        {
            int    idFaseTeste        = 1;
            int    idMaquinaVirtual   = 1;
            bool   EnvioTelegram      = false;
            int    idAmbienteExecucao = 1;
            string mensagem           = "";

            try
            {
                #region

                List <int>          idsTestData   = new List <int>();
                List <int>          idsTestData2  = new List <int>();
                List <Encadeamento> encadeamentos = new List <Encadeamento>();
                Random rnd = new Random();


                //criar o encadeamento na tabela
                if (qtd.Equals("1"))
                {
                    Encadeamento encadeamento = new Encadeamento {
                        Descricao = "Encadeamento " + rnd.Next(1, 100).ToString()
                    };

                    db.Encadeamento.Add(encadeamento);
                    db.SaveChanges();

                    encadeamentos.Add(encadeamento);
                }
                else
                {
                    for (int i = 0; i < 2; i++)
                    {
                        Encadeamento encadeamento = new Encadeamento {
                            Descricao = "Encadeamento " + rnd.Next(1, 100).ToString()
                        };

                        db.Encadeamento.Add(encadeamento);
                        db.SaveChanges();

                        encadeamentos.Add(encadeamento);
                    }
                }


                if (encadeamentos.Count == 1)
                {
                    string ids = ConfigurationSettings.AppSettings["Encadeamento1"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData.Add(Int32.Parse(item)); });

                    //idsTestData.Add(1);
                    //idsTestData.Add(2);
                    //idsTestData.Add(3);

                    for (int i = 0; i < idsTestData.Count; i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[0].Id,
                            IdTestData     = idsTestData[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    ReplaceQuery(idsTestData, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                }
                else
                {
                    string ids = ConfigurationSettings.AppSettings["Encadeamento1"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData.Add(Int32.Parse(item)); });

                    ids = ConfigurationSettings.AppSettings["Encadeamento2"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData2.Add(Int32.Parse(item)); });

                    //idsTestData.Add(1);
                    //idsTestData.Add(2);
                    //idsTestData.Add(3);

                    //idsTestData2.Add(11);
                    //idsTestData2.Add(12);

                    for (int i = 0; i < idsTestData.Count(); i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[0].Id,
                            IdTestData     = idsTestData[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    for (int i = 0; i < idsTestData2.Count(); i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[1].Id,
                            IdTestData     = idsTestData2[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    ReplaceQuery(idsTestData, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                    ReplaceQuery(idsTestData2, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                }



                #endregion


                string          pAginaDoJob = null;
                int             idAmbv      = idMaquinaVirtual;
                AmbienteVirtual ambv        = db.AmbienteVirtual.Where(x => x.Id == idAmbv).FirstOrDefault();

                if (ambv.IP != null)
                {
                    mensagem    = "Execução iniciada com sucesso!";
                    pAginaDoJob = ConfigurationSettings.AppSettings[ambv.IP];
                }
                else
                {
                    mensagem = "Não foi possível definir o Job do Jenkins.";
                }

                runJobJenkinsRemote(pAginaDoJob);



                return(Json(new { Data = mensagem }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { Data = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
        public JsonResult Salvar(string encadeamentoJson)
        {
            EncadeamentoVO encadeamentoVO = JsonConvert.DeserializeObject <EncadeamentoVO>(encadeamentoJson);

            using (var context = new DbEntities())
            {
                using (var dbContextTransaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        //edição de um encadeamento
                        #region
                        if (encadeamentoVO.IdEncadeamento != null)
                        {
                            log.Info("Entrou na edição do encadeamento " + encadeamentoVO.IdEncadeamento + ".");

                            Encadeamento enc = context.Encadeamento.Where(x => x.Id == encadeamentoVO.IdEncadeamento).FirstOrDefault();
                            enc.Descricao = encadeamentoVO.Descricao;
                            context.Encadeamento.Attach(enc);

                            context.Entry(enc).State = System.Data.Entity.EntityState.Modified;

                            context.SaveChanges();
                            log.Info("Alterando a descrição do encadeamento.");

                            List <EncadeamentoVO.TestDataEncadeamento> listaTdsBanco = (from entd in context.Encadeamento_TestData
                                                                                        where entd.IdEncadeamento == enc.Id
                                                                                        select new EncadeamentoVO.TestDataEncadeamento
                            {
                                Descricao = enc.Descricao,
                                Id = entd.Id,
                                Ordem = entd.Ordem,
                                IdTestData = entd.IdTestData,
                                IdAmbienteExecucao = entd.IdAmbienteExecucao,
                            }
                                                                                        ).ToList();

                            List <EncadeamentoVO.TestDataEncadeamento> listaObjTela = encadeamentoVO.testDatas;


                            for (int i = 0; i < listaObjTela.Count(); i++)
                            {
                                int idTemp         = listaObjTela[i].Id;
                                int enca           = enc.Id;
                                int idTestDataTemp = listaObjTela[i].IdTestData;
                                EncadeamentoVO.TestDataEncadeamento encTemp = listaTdsBanco.Where(x => x.Id == idTemp).FirstOrDefault();

                                if (encTemp == null)
                                {
                                    listaTdsBanco.Add(listaObjTela[i]);
                                    TestData tdAdd = context.TestData.Where(x => x.Id == idTestDataTemp).FirstOrDefault();
                                    Encadeamento_TestData encTdTemp = new Encadeamento_TestData
                                    {
                                        IdTestData         = tdAdd.Id,
                                        IdEncadeamento     = enca,
                                        Ordem              = listaObjTela[i].Ordem,
                                        IdAmbienteExecucao = listaObjTela[i].IdAmbienteExecucao
                                    };
                                    context.Encadeamento_TestData.Add(encTdTemp);
                                    context.SaveChanges();
                                    log.Info("Associando o testData" + tdAdd.Id + " ao Encadeamento.");
                                }
                            }

                            for (int z = 0; z < listaTdsBanco.Count(); z++)
                            {
                                int idTemp = listaTdsBanco[z].Id;
                                EncadeamentoVO.TestDataEncadeamento encTemp = listaObjTela.Where(x => x.Id == idTemp).FirstOrDefault();

                                if (encTemp == null)
                                {
                                    listaTdsBanco.Remove(listaTdsBanco[z]);
                                    Encadeamento_TestData encDelete = context.Encadeamento_TestData.Where(x => x.Id == idTemp).FirstOrDefault();

                                    context.Encadeamento_TestData.Remove(encDelete);
                                    context.SaveChanges();
                                    log.Info("Desassociando o testData" + encDelete.IdTestData + " do Encadeamento.");
                                }
                            }

                            for (int w = 0; w < listaTdsBanco.Count(); w++)
                            {
                                int idTemp = listaTdsBanco[w].Id;

                                EncadeamentoVO.TestDataEncadeamento encTemp = listaObjTela.Where(x => x.Id == idTemp).FirstOrDefault();

                                if (encTemp != null)
                                {
                                    for (int y = 0; y < encTemp.parametros.Count(); y++)
                                    {
                                        int?           idParametroScript = encTemp.parametros[y].IdParametroScript;
                                        int?           idTestData        = encTemp.parametros[y].IdTestData;
                                        ParametroValor pv = context.ParametroValor.Where(x => x.IdParametroScript == idParametroScript).Where(x => x.IdTestData == idTestData).FirstOrDefault();

                                        if (pv != null)
                                        {
                                            pv.Valor = encTemp.parametros[y].Valor;
                                            pv.IdParametroValor_Origem = encTemp.parametros[y].IdParametroValor_Origem;

                                            context.ParametroValor.Attach(pv);

                                            context.Entry(pv).State = System.Data.Entity.EntityState.Modified;

                                            context.SaveChanges();
                                            log.Info("Atualizando o ParametroValor " + pv.Id + ", do ParametroScript " + idParametroScript + " e do TestData " + idTestData + ".");
                                        }
                                    }
                                }
                            }

                            string json = JsonConvert.SerializeObject(true, Formatting.Indented);

                            dbContextTransaction.Commit();
                            log.Info("Salvando a edição do encadeamento " + encadeamentoVO.IdEncadeamento);
                            return(Json(json, JsonRequestBehavior.AllowGet));
                        }
                        #endregion
                        //novo encadeamento
                        #region
                        else
                        {
                            //adicionando Encadeamento
                            Encadeamento encadeamento = new Encadeamento {
                                Descricao = encadeamentoVO.Descricao
                            };
                            context.Encadeamento.Add(encadeamento);
                            context.SaveChanges();
                            log.Info("Inclusão do encadeamento " + encadeamento.Id);

                            foreach (EncadeamentoVO.TestDataEncadeamento testDataEncadeamento in encadeamentoVO.testDatas)
                            {
                                //criando relacao testdata encadeamento
                                Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                                {
                                    IdEncadeamento     = encadeamento.Id,
                                    IdTestData         = testDataEncadeamento.IdTestData,
                                    Ordem              = testDataEncadeamento.Ordem,
                                    IdAmbienteExecucao = testDataEncadeamento.IdAmbienteExecucao
                                };

                                context.Encadeamento_TestData.Add(encadeamentoTestData);
                                context.SaveChanges();
                                log.Info("Associando o testData " + testDataEncadeamento.IdTestData + " ao Encadeamento " + encadeamento.Id);

                                //populando a tabela de parametro valor
                                foreach (EncadeamentoVO.TestDataEncadeamento.ParametroEncadeamento parametrosEncadeamento in testDataEncadeamento.parametros)
                                {
                                    ParametroValor pv = context.ParametroValor.Where(x => x.Id == parametrosEncadeamento.IdParametroValor).FirstOrDefault();

                                    pv.Valor = parametrosEncadeamento.Valor;

                                    context.ParametroValor.Attach(pv);

                                    context.Entry(pv).State = System.Data.Entity.EntityState.Modified;

                                    context.SaveChanges();
                                    log.Info("Salvando o ParametroValor " + pv.Id + " do TestData " + testDataEncadeamento.IdTestData);
                                }
                            }
                            string json = JsonConvert.SerializeObject(true, Formatting.Indented);

                            dbContextTransaction.Commit();
                            log.Info("Salvando o Encadeamento " + encadeamento.Id);
                            return(Json(json, JsonRequestBehavior.AllowGet));
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        string json = JsonConvert.SerializeObject(false, Formatting.Indented);
                        dbContextTransaction.Rollback();
                        return(Json(json, JsonRequestBehavior.AllowGet));
                    }
                }
            }
        }