public void MarcarProyectoComoFinalizadoCuando()
        {
            Tarea tarea = new TareaSimple(new ContextoGestorProyectos())
            {
                Nombre = "Tarea"
            };

            tarea.MarcarFinalizada();
            Etapa etapa = new Etapa();

            etapa.AgregarTarea(tarea);
            etapa.MarcarFinalizada();

            Tarea tarea2 = new TareaSimple(new ContextoGestorProyectos())
            {
                Nombre = "Tarea"
            };
            Etapa etapa2 = new Etapa();

            etapa2.AgregarTarea(tarea);
            Proyecto proyecto = new Proyecto(new ContextoGestorProyectos());

            proyecto.AgregarEtapa(etapa2);
            proyecto.AgregarEtapa(etapa);
            proyecto.MarcarFinalizado();
            Assert.False(proyecto.EstaFinalizado);
        }
        public void ProyectoPadreDeTarea()
        {
            Tarea tarea = new TareaSimple(new ContextoGestorProyectos())
            {
                Nombre            = "Tarea hija",
                FechaInicio       = DateTime.Now,
                FechaFinalizacion = DateTime.Now,
                DuracionPendiente = 100
            };
            Etapa etapa = new Etapa()
            {
                EtapaID     = 1,
                FechaInicio = DateTime.Now
            };

            etapa.AgregarTarea(tarea);
            Proyecto proyecto = new Proyecto(new ContextoGestorProyectos())
            {
                ProyectoID = 1,
                Nombre     = "Proyecto"
            };

            proyecto.AgregarEtapa(etapa);
            using (var db = new ContextoGestorProyectos())
            {
                db.AgregarProyecto(proyecto);
            }
            Assert.Equal(proyecto.ProyectoID, tarea.ObtenerProyectoPadre().ProyectoID);
        }
Esempio n. 3
0
        public void CriarEtapa()
        {
            var etapa = new Etapa("Solicitação");

            Assert.AreEqual(etapa.Passos.Count, 0);
            Assert.AreEqual(etapa.Nome, "Solicitação");
        }
Esempio n. 4
0
 private void ValidarEtapa(Etapa etapa)
 {
     if (string.IsNullOrEmpty(etapa.Nome))
     {
         throw new AcademicoException("Nome é obrigatório");
     }
 }
Esempio n. 5
0
        public BindingList <Etapa> listarEtapas()
        {
            BindingList <Etapa> etapas = new BindingList <Etapa>();
            MySqlConnection     con    = new MySqlConnection(DBManager.cadena);

            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            String       sql = "SELECT ID_TIPO_FASE_PROYECTO, DESCRIPCION FROM  TIPO_FASE_PROYECTO ";

            cmd.CommandText = sql;
            cmd.Connection  = con;
            MySqlDataReader lector = cmd.ExecuteReader();

            while (lector.Read())
            {
                Etapa et = new Etapa();
                et.IdEtapa     = lector.GetInt32("ID_TIPO_FASE_PROYECTO");
                et.NombreEtapa = lector.GetString("DESCRIPCION");
                etapas.Add(et);
            }
            Etapa e = new Etapa();

            e.IdEtapa     = 0;
            e.NombreEtapa = "---Seleccionar---";
            etapas.Insert(0, e);
            con.Close();
            return(etapas);
        }
Esempio n. 6
0
        public BindingList <Etapa> listarEtapasxProyecto(int id)
        {
            BindingList <Etapa> etapas = new BindingList <Etapa>();
            MySqlConnection     con    = new MySqlConnection(DBManager.cadena);

            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            String       sql = "SELECT ID_TIPO_FASE_PROYECTO, DESCRIPCION FROM  TIPO_FASE_PROYECTO WHERE ID_TIPO_FASE_PROYECTO >=" + id;

            cmd.CommandText = sql;
            cmd.Connection  = con;
            MySqlDataReader lector = cmd.ExecuteReader();

            while (lector.Read())
            {
                Etapa et = new Etapa();
                et.IdEtapa     = lector.GetInt32("ID_TIPO_FASE_PROYECTO");
                et.NombreEtapa = lector.GetString("DESCRIPCION");
                if (id != 1 && et.IdEtapa != 7)
                {
                    etapas.Add(et);
                }
                if (id == 1 || id == 7)
                {
                    etapas.Add(et);
                }
            }
            Etapa e = new Etapa();

            con.Close();
            return(etapas);
        }
Esempio n. 7
0
        public async Task <ActionResult <Etapa> > PostEtapa(Etapa etapa)
        {
            _context.Etapa.Add(etapa);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetEtapa", new { id = etapa.Id }, etapa));
        }
Esempio n. 8
0
        public void CriarSolicitacaoDeFornecedorComFluxo()
        {
            var         webForLink          = new Aplicacao("WebForLink", "Cadastro De Fornecedores");
            var         samarco             = new ClienteAncora("Samarco");
            var         nelson              = new Usuario("nelson", webForLink, samarco);
            TipoEmpresa pessoaJuridica      = new EmpressaPessoaJuridica();
            Empresa     sorteq              = new Fornecedor("Sorteq", "12345678900", pessoaJuridica);
            Solicitacao solicitacaoCadastro = new SolicitacaoCadastro(nelson, sorteq);

            Assert.IsNull(solicitacaoCadastro.Fluxo);

            var cadastro = new Fluxo(new FluxoCriacao(), samarco, pessoaJuridica);
            var a        = new Etapa("A");

            cadastro.AdicionarPassos(a, new Passo("A.1"), new Passo("A.2"));
            cadastro.AdicionarPassos(new Etapa("B"), new Passo("B.1"));
            cadastro.AdicionarPassos(new Etapa("C"), new Passo("C.1"), new Passo("C.2"), new Passo("C.3"));

            solicitacaoCadastro.SetFluxo(cadastro);

            Assert.AreEqual(solicitacaoCadastro.EtapaAtual, a);
            cadastro.AprovarPasso(new Passo("A.2"));

            //var cadastroDeFornecedor = new Fluxo(cadastroFornecedor, _samarco, _pessoaJuridica);
            //var cadastroFornecedor = new TipoFluxo("Cadastro de Fornecedor");
            //solicitacaoCadastro.Tipo.SetFluxo(cadastroDeFornecedor);
            //cadastroDeFornecedor.AdicionarEtapas(new Etapa("Solicitacao"), new Etapa("MDA"), new Etapa("Conclusão"));
            //Assert.AreEqual(cadastroDeFornecedor.EtapaAtual.Nome, "Solicitacao");
            //Assert.AreEqual(solicitacaoCadastro.Tipo.Fluxo.EtapaAtual.Nome, "Solicitacao");
        }
Esempio n. 9
0
        private void DuplicarPermissoes(Etapa etapaOriginal, Etapa etapaNova)
        {
            etapaNova.Permissoes = new List <EtapaPermissao>();

            foreach (var etapaPermissao in etapaOriginal.Permissoes)
            {
                var permissao = new EtapaPermissao
                {
                    Etapa            = etapaNova,
                    Perfil           = etapaPermissao.Perfil,
                    Usuario          = etapaPermissao.Usuario,
                    NivelOcupacional = etapaPermissao.NivelOcupacional,
                    Uf                    = etapaPermissao.Uf,
                    Notificar             = etapaPermissao.Notificar,
                    Analisar              = etapaPermissao.Analisar,
                    ChefeImediato         = etapaPermissao.ChefeImediato,
                    DiretorCorrespondente = etapaPermissao.DiretorCorrespondente,
                    GerenteAdjunto        = etapaPermissao.GerenteAdjunto,
                    Solicitante           = etapaPermissao.Solicitante
                };

                //repositorioEtapaPermissao.SalvarSemCommit(permissao);

                etapaNova.Permissoes.Add(permissao);
            }
        }
Esempio n. 10
0
        public async Task <IActionResult> PutEtapa(int id, Etapa etapa)
        {
            if (id != etapa.Id)
            {
                return(BadRequest());
            }

            _context.Entry(etapa).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!EtapaExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Esempio n. 11
0
        public ActionResult DeleteConfirmed(int id)
        {
            Etapa usuario = etapaBLL.ObterPorId(id);

            etapaBLL.Excluir(id);
            return(RedirectToAction("Index"));
        }
        private void CargarTramitesEtapas()
        {
            var          db   = new obligP3parte2Context();
            string       ruta = HostingEnvironment.ApplicationPhysicalPath + @"archivos\tramitesEtapas.txt";
            StreamReader sr   = System.IO.File.OpenText(ruta);
            string       line = sr.ReadLine();

            while (line != null)
            {
                string[] vecStr = line.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);

                Tramite t = db.Tramites.Find(int.Parse(vecStr[0]));

                Etapa e = new Etapa()
                {
                    CodigoAlfa  = vecStr[1],
                    Descripcion = vecStr[2],
                    TiempoMax   = int.Parse(vecStr[3])
                };
                var etapaDb = db.Etapas.Find(e.CodigoAlfa);
                if (t != null && etapaDb == null && !t.Etapas.Contains(etapaDb))
                {
                    t.Etapas.Add(e);
                    ViewBag.DatosCargados += "- tramite " + t.Titulo + " asignada etapa " + e.CodigoAlfa + "<br>";
                }
                line = sr.ReadLine();
            }
            db.SaveChanges();
            sr.Close();
        }
Esempio n. 13
0
 public Etapa ProximaEtapa(Etapa etapa)
 {
     return(db.Etapas.ToList()
            .Where(x => x.CodigoEtapa > etapa.CodigoEtapa)
            .OrderBy(x => x.CodigoEtapa)
            .FirstOrDefault());
 }
Esempio n. 14
0
        public bool Delete(Etapa e)
        {
            bool state = false;

            MySqlConnection connection = Database.GetInstance().GetConnection();

            string query = string.Format("DELETE FROM Etapa WHERE codigo = {0};", e.Codigo);

            MySqlCommand command = new MySqlCommand(query, connection);

            try
            {
                if (connection.State != System.Data.ConnectionState.Open)
                {
                    connection.Open();
                }

                command.ExecuteNonQuery();

                state = true;
            }
            catch (MySqlException exception)
            {
                MessageBox.Show(exception.Message, "Erro ao excluir",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            finally
            {
                connection.Close();
            }
            return(state);
        }
Esempio n. 15
0
        public Resultado Excluir(int id)
        {
            Resultado resultado = new Resultado();

            resultado.Acao = "Exclusão de Etapa";

            Etapa Etapa = _context.Etapas.First(t => t.Id == id);
            int   Last  = _context.Etapas
                          .OrderByDescending(e => e.Id)
                          .First(e => e.ProjetoId == Etapa.ProjetoId).Id;

            if (Etapa == null)
            {
                resultado.Inconsistencias.Add("Etapa não encontrada");
            }
            else if (Last != id)
            {
                resultado.Inconsistencias.Add("Possível somente excluir a última etapa do projeto");
            }
            else
            {
                _context.EtapaMeses.RemoveRange(_context.EtapaMeses.Where(t => t.EtapaId == id));
                _context.EtapaProdutos.RemoveRange(_context.EtapaProdutos.Where(t => t.EtapaId == id));
                _context.Etapas.Remove(Etapa);
                _context.SaveChanges();
            }

            return(resultado);
        }
Esempio n. 16
0
 private void ExecutarAcao(Etapa proxima, Acao acao)
 {
     progressBar1.Value     = 0;
     progressBar2.Value     = 0;
     timerAcao.Interval     = 250;
     timerAcao.Acao         = acao;
     timerAcao.ProximaEtapa = proxima;
     progressBar1.Maximum   = acao.EsperaInicial * 4;
     if (timerAcao_first)
     {
         timerAcao.Tick += delegate(object sender, EventArgs e)
         {
             EtapaTimer timer = (EtapaTimer)sender;
             timerAcao_first = false;
             progressBar1.Increment(1);
             if (progressBar1.Value == progressBar1.Maximum)
             {
                 timerAcao.Stop();
                 timer.Acao.Executar();
                 Esperar(timer.Acao, timer.ProximaEtapa);
             }
         }
     }
     ;
     timerAcao.Start();
 }
Esempio n. 17
0
        private void SetDTO_Etapa()
        {
            int codEtapa = int.Parse(dataGridViewEtapas.CurrentRow.Cells[0].Value.ToString());

            descricaoEtapa.ReadOnly = false;

            Etapa e = daoEtapa.Read(codEtapa);

            if (e.Descricao != null)
            {
                descricaoEtapa.Text = e.Descricao.ToString();
            }
            else
            {
                descricaoEtapa.Text = "";
            }

            txtSituacaoEtapa.Text  = e.Situacao;
            datePickerInicio.Text  = e.DataInicio.ToLongDateString();
            datePickerTermino.Text = e.PrevisaoTermino.ToLongDateString();

            if (e.Situacao.ToString() == "Finalizado" || e.Situacao.ToString() == "Pendente" || e.Situacao.ToString() == "Pausado")
            {
                descricaoEtapa.ReadOnly = true;
            }
        }
Esempio n. 18
0
 public ActionResult Create([Bind(Include = "Id,Descripcion,Lotes,Dalia,Azalea,Iris,Orquidea,Bugambilia,PrecioM2Excedente,MontoEsquina")] Etapa etapa)
 {
     if (ModelState.IsValid)
     {
         if (etapa.Lotes.Length > 0)
         {
             ICollection <int> lotesDisp = new List <int>();
             var stringLotes             = etapa.Lotes.Split(',');
             foreach (var lote in stringLotes)
             {
                 lotesDisp.Add(int.Parse(lote));
             }
             etapa.Lotes = JsonConvert.SerializeObject(lotesDisp);
         }
         //Por aqui agarra cuando es un lote nuevo
         //Puesto que el id viene Vacio y se le crea uno nuevo
         if (etapa.Id == 0)
         {
             db.Etapas.Add(etapa);
             db.SaveChanges();
         }
         else
         {
             db.Entry(etapa).State = EntityState.Modified;
             db.SaveChanges();
         }
         return(RedirectToAction("Index"));
     }
     return(View(etapa));
 }
        private void crearNuevoProyecto()
        {
            Tarea tareaNuevoProyecto = new TareaSimple(contexto)
            {
                Nombre            = this.textBoxNombreTareaNuevoProyecto.Text,
                Objetivo          = this.textBoxObjetivoTareaNuevoProyecto.Text,
                Descripcion       = this.richTextBoxDescripcionTareaNuevoProyecto.Text,
                FechaInicio       = monthCalendarFechaInicioTareaNuevoProyecto.SelectionStart,
                FechaFinalizacion = monthCalendarFechaFinTareaNuevoProyecto.SelectionStart,
                DuracionPendiente = Int32.Parse(this.textBoxDuracionPendienteNuevoProyecto.Text),
                DuracionEstimada  = Int32.Parse(textBoxDuracionEstimadaTarea.Text)
            };

            tareaNuevoProyecto.DefinirPrioridad(comboBoxPrioridadNuevoProyecto.SelectedItem.ToString());
            Etapa etapaNuevoProyecto = new Etapa()
            {
                Nombre           = this.textBoxNombreEtapaNuevoProyecto.Text,
                FechaInicio      = this.monthCalendarFechaInicioEtapa.SelectionStart,
                DuracionEstimada = Int32.Parse(textBoxDurcionEstimadaEtapa.Text)
            };
            Proyecto nuevoProyecto = new Proyecto(contexto)
            {
                Nombre           = textBoxNombreDelNuevoProyecto.Text,
                Objetivo         = this.richTextBoxObjetivoDelNuevoProyecto.Text,
                FechaInicio      = this.monthCalendarFechaInicioProyecto.SelectionStart,
                DuracionEstimada = Int32.Parse(textBoxDuracionEstimadaProyecto.Text)
            };

            etapaNuevoProyecto.AgregarTarea(tareaNuevoProyecto);

            nuevoProyecto.AgregarEtapa(etapaNuevoProyecto);
            contexto.AgregarProyecto(nuevoProyecto);
        }
Esempio n. 20
0
        private void BtnAtualizar_Click(object sender, EventArgs e)
        {
            Etapa     objEtapa;
            EtapaCtrl objEtapaCtrl;

            try
            {
                objEtapa     = new Etapa();
                objEtapaCtrl = new EtapaCtrl();
                int linha = this.dgvRealizado.SelectedCells[0].RowIndex;
                objEtapa.setCodigo(dgvRealizado.Rows[linha].Cells[0].Value.ToString());
                objEtapa.setPercentualConclusao(dgvRealizado.Rows[linha].Cells[2].Value.ToString());
                objEtapa.setDataInicioReal(dgvRealizado.Rows[linha].Cells[3].Value.ToString());
                objEtapa.setDataFimReal(dgvRealizado.Rows[linha].Cells[4].Value.ToString());
                bool mensagem = objEtapaCtrl.atualizar(objEtapa);
                if (mensagem)
                {
                    MessageBox.Show("Etapa Atualizada com Sucesso");
                }
                carregaGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public IHttpActionResult associateStage(Etapa pEtapa)
        {
            using (NpgsqlConnection connection = DataBase.getConnection())
            {
                StringBuilder parameters = new StringBuilder();
                parameters.AppendFormat("select * from asociarEtapa({0}, {1},'{2}','{3}')", pEtapa._idProyecto,
                                        pEtapa._id, pEtapa._fInicio.ToString("dd/MM/yyyy"), pEtapa._fFin.ToString("dd/MM/yyyy"));

                NpgsqlCommand command = new NpgsqlCommand(parameters.ToString(), connection);
                command.CommandType = CommandType.Text;

                try
                {
                    connection.Open();
                    NpgsqlDataReader reader = command.ExecuteReader();
                    reader.Read();

                    int result = reader.GetInt32(0);
                    switch (result)
                    {
                    case -1: return(Json(new Response("La etapa a asociar no existe")));

                    case -2: return(Json(new Response("El proyecto asociado no existe")));

                    default: return(Json(new Etapa {
                            _id = result
                        }));
                    }
                }
                catch (NpgsqlException ex) { return(Json(new Response(Constants.ERROR_DATABASE_CONNECTION))); }
                finally { connection.Close(); }
            }
        }
Esempio n. 22
0
        public void ActivarTarea(string nombreInternoProceso, string nombreInternoEtapa, string numeroTicket, string identificacionUsuario)
        {
            //Primero obtengo el proceso
            Proceso proceso = _context.Procesos.Include(d => d.Etapas).FirstOrDefault(x => x.NombreInterno == nombreInternoProceso);

            //Segundo Obtengo la etapa
            Etapa etapa = proceso.Etapas.FirstOrDefault(x => x.NombreInterno == nombreInternoEtapa);

            //Tercero obtengo la solicitud
            Solicitud solicitud = proceso.Solicitudes.FirstOrDefault(d => d.NumeroTicket == numeroTicket);

            Tarea tarea = new Tarea
            {
                Etapa       = etapa,
                Estado      = EstadoTarea.Activada,
                FechaInicio = DateTime.Now,
                Solicitud   = solicitud,
                AsignadoA   = etapa.ValorUsuarioAsignado
            };

            _context.Tareas.Add(tarea);
            _context.SaveChanges();
            var lst = _context.TareasAutomaticas.Include(x => x.Etapa).Where(x => x.Etapa.Id == etapa.Id && x.EventoDisparador == TipoEventoEtapa.AlActivar).ToList();

            foreach (var x in lst)
            {
                EjecutaTrabajo(x.Namespace, x.Clase, x.Metodo, numeroTicket);
            }

            if (etapa.TipoUsuarioAsignado == TipoUsuarioAsignado.Boot)
            {
                CompletarTarea(nombreInternoProceso, nombreInternoEtapa, numeroTicket, identificacionUsuario);
            }
        }
Esempio n. 23
0
        public Etapa Buscar(int id)
        {
            Etapa etapa_nueva = new Etapa();

            etapa_nueva.Buscar(id);
            return(etapa_nueva);
        }
        public IHttpActionResult all()
        {
            List <Etapa> stages = new List <Etapa>();

            using (NpgsqlConnection connection = DataBase.getConnection())
            {
                NpgsqlCommand command = new NpgsqlCommand("listaretapas", connection);
                command.CommandType = CommandType.StoredProcedure;

                try
                {
                    connection.Open();
                    NpgsqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        Etapa stage = new Etapa();
                        stage._id          = reader.GetInt32(0);
                        stage._nombre      = reader.GetString(1);
                        stage._descripcion = reader.GetString(2);
                        stages.Add(stage);
                    }

                    return(Json(stages));
                }
                catch (NpgsqlException ex) { return(Json(new Response(Constants.ERROR_DATABASE_CONNECTION))); }
                finally { connection.Close(); }
            }
        }
Esempio n. 25
0
        public void EliminarEtapa()
        {
            Etapa etapa = new Etapa()
            {
                Nombre      = "Etapa",
                FechaInicio = DateTime.Now
            };
            Persona p = new Persona()
            {
                Nombre = "Nombre",
                Rol    = "Roger"
            };
            Tarea tarea = new TareaSimple(new ContextoGestorProyectos())
            {
                Nombre            = "Tarea",
                FechaInicio       = DateTime.Now,
                Prioridad         = Tarea.PRIORIDAD_MEDIA,
                FechaFinalizacion = DateTime.Now.AddDays(1),
                Descripcion       = "Descripcion",
                Objetivo          = "Objetivo",
                DuracionPendiente = 10
            };

            tarea.AgregarPersona(p);
            etapa.AgregarTarea(tarea);
            using (var db = new ContextoGestorProyectos())
            {
                int id = db.AgregarEtapa(etapa);
                db.EliminarEtapa(id);
                Assert.DoesNotContain(etapa, db.Etapas);
            }
        }
Esempio n. 26
0
        public void AprovarPasso(Usuario aprovador, Etapa etapa, Passo aprovado)
        {
            if (EtapaAtual.Equals(etapa))
            {
                foreach (var item in Etapas)
                {
                    if (!item.Aprovado && item.Equals(etapa))
                    {
                        foreach (var passo in item.Passos)
                        {
                            if (!passo.Aprovado && passo.Equals(aprovado))
                            {
                                passo.Aprovar();
                                break;
                            }
                        }
                        break;
                    }
                }

                /*
                 * Passo passoAprovado = EtapaAtual.Passos.FirstOrDefault(y => y == aprovado);
                 * if (passoAprovado != null)
                 *  if (aprovador.Papeis.FirstOrDefault(x => passoAprovado.Papeis.Contains(x)) != null)
                 *      passoAprovado.SetAprovado(true);
                 */
            }
        }
 public void AgregarProyectoConPersonaYEtapa(string nombreProyecto, string objetivo, string nombrePersona, string rol)
 {
     using (var db = new ContextoGestorProyectos())
     {
         Proyecto proyecto = new Proyecto(db)
         {
             Nombre      = nombreProyecto,
             Objetivo    = objetivo,
             FechaInicio = DateTime.Now
         };
         Persona persona = new Persona()
         {
             Nombre = nombrePersona,
             Rol    = rol
         };
         Etapa etapa = new Etapa()
         {
             Nombre      = "Una etapa",
             FechaInicio = DateTime.Now
         };
         proyecto.AgregarEtapa(etapa);
         int       id         = db.AgregarProyecto(proyecto);
         IProyecto unProyecto = db.ObtenerProyecto(id);
         Assert.True(unProyecto.Etapas.Contains(etapa));
         Assert.Equal(proyecto, unProyecto);
     }
 }
Esempio n. 28
0
        public IHttpActionResult PutEtapa([FromUri] int id, [FromBody] Etapa etapa)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != etapa.Id)
            {
                return(BadRequest());
            }

            db.Entry(etapa).State = System.Data.Entity.EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(Ok(etapa));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            Etapa etapa = db.Etapa.Find(id);

            db.Etapa.Remove(etapa);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Esempio n. 30
0
 public void ActualizarEtapa(Etapa etapa)
 {
     using (ModeloDeDominio modeloDeDominio = new ModeloDeDominio())
     {
         modeloDeDominio.AttachCopy(etapa);
         modeloDeDominio.SaveChanges();
     }
 }