public async Task UpdateSolicitud(FormacionAcademica formacionAcademica)
        {
            try
            {
                var _fa = await _ctx.FormacionAcademica.FirstOrDefaultAsync(e => e.FormacionAcademicaId == formacionAcademica.FormacionAcademicaId);

                if (_fa != null)
                {
                    //_fa.EstadoFlujoId = formacionAcademica.EstadoFlujoId;
                    //_fa.GradoAcademicoId = formacionAcademica.GradoAcademicoId;
                    //_fa.CarreraId = formacionAcademica.CarreraId;
                    //_fa.Especialidad = formacionAcademica.Especialidad;
                    //_fa.Cedula = formacionAcademica.Cedula;
                    //_fa.InstitucionID = formacionAcademica.InstitucionID;
                    //_fa.PaisID = formacionAcademica.PaisID;
                    //_fa.FechaInicio = formacionAcademica.FechaInicio;
                    //_fa.FechaTermino = formacionAcademica.FechaTermino;
                    //_fa.IdArchivo = formacionAcademica.IdArchivo;
                    //_fa.EstaTitulado = formacionAcademica.EstaTitulado;
                    //_fa.FechaValidacion = formacionAcademica.FechaValidacion;
                    _ctx.Entry(_fa).CurrentValues.SetValues(formacionAcademica);
                    await _ctx.SaveChangesAsync();

                    PersonasRepository prep = new PersonasRepository();
                    Personas           p    = await prep.GetByClave(formacionAcademica.ClavePersona);

                    p.ultimaActualizacion = DateTime.Now;
                    await prep.Update(p);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
 /// <summary>
 /// Agrega un objeto tipo formacion academica.
 /// </summary>
 /// <param name="campo">Objeto tipo formacion academica</param>
 /// <returns></returns>
 public async Task Create(FormacionAcademica formacionAcademica)
 {
     try
     {
         _ctx.FormacionAcademica.Add(formacionAcademica);
         await _ctx.SaveChangesAsync();
     }
     catch (Exception e)
     {
         throw new Exception(e.Message, e);
     }
 }
        public async Task <IHttpActionResult> ValidarDuplicados(FormacionAcademica Obj)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                var exis = await _faRepo.ValidarDuplicados(Obj);

                return(Ok(exis));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task <IHttpActionResult> UpdateEstado(FormacionAcademica FormacionAcademica)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                await _faRepo.UpdateEstado(FormacionAcademica);

                return(Ok("Registro actualizado correctamente!"));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task UpdateEstado(FormacionAcademica FormacionAcademica)
        {
            try
            {
                var _FormacionAcademica = await _ctx.FormacionAcademica.FirstOrDefaultAsync(e => e.FormacionAcademicaId == FormacionAcademica.FormacionAcademicaId);

                if (_FormacionAcademica != null)
                {
                    _FormacionAcademica.EstadoFlujoId = FormacionAcademica.EstadoFlujoId;

                    await _ctx.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        /// <summary>
        /// Actualiza la información del objeto formacion academica.
        /// </summary>
        /// <param name="formacionAcademica">objeto con los datos para actualizar</param>
        /// <returns></returns>
        public async Task Update(FormacionAcademica formacionAcademica)
        {
            try
            {
                var _fa = await _ctx.FormacionAcademica.FirstOrDefaultAsync(e => e.FormacionAcademicaId == formacionAcademica.FormacionAcademicaId);

                if (_fa != null)
                {
                    if (formacionAcademica.Adjunto != null)
                    {
                        if (formacionAcademica.Adjunto.nombre == "eliminar")
                        {
                            int id = Convert.ToInt32(formacionAcademica.Adjunto.AdjuntoId);
                            _fa.AdjuntoId = null;
                            await _ctx.SaveChangesAsync();

                            await new AdjuntoRepository().Delete(id);
                        }
                        ///Agregar archivo al editar
                        if (formacionAcademica.Adjunto.AdjuntoId == 0)
                        {
                            if (_fa.AdjuntoId != null)
                            {
                                var id = _fa.AdjuntoId;
                                _fa.AdjuntoId = null;
                                await _ctx.SaveChangesAsync();

                                await new AdjuntoRepository().Delete(id);
                            }
                            Adjunto key = await new AdjuntoRepository().CreateAd(formacionAcademica.Adjunto);
                            formacionAcademica.AdjuntoId = key.AdjuntoId;
                        }
                    }
                    _ctx.Entry(_fa).CurrentValues.SetValues(formacionAcademica);
                    await _ctx.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <IHttpActionResult> Update(FormacionAcademica formacionacademica)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                //Elimar archivo

                //solución de ALAN replicada
                //if (formacionacademica.Adjunto != null)
                //    formacionacademica.AdjuntoId = formacionacademica.Adjunto.AdjuntoId;
                await _faRepo.Update(formacionacademica);

                return(Ok(formacionacademica));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        /// <summary>
        /// Valida que no existan registros de formacion academica repetidos
        /// </summary>
        /// <param name="model"><FormacionAcademica>model</param>
        /// <returns>Boolean</returns>
        public async Task <Boolean> ValidarDuplicados(FormacionAcademica model)
        {
            try
            {
                // var data= await GetDALikeTituloNuevo(model.TituloPublicacion);
                var registros = await _ctx.FormacionAcademica.Where(e => e.ClavePersona == model.ClavePersona && e.GradoAcademicoId == model.GradoAcademicoId &&
                                                                    DbFunctions.TruncateTime(e.FechaInicio) == DbFunctions.TruncateTime(model.FechaInicio) &&
                                                                    DbFunctions.TruncateTime(e.FechaTermino) == DbFunctions.TruncateTime(model.FechaTermino) &&
                                                                    e.FormacionAcademicaId != model.FormacionAcademicaId).AsNoTracking().CountAsync();

                if (registros > 0)
                {
                    return(true);
                }
                return(false);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }