[HttpGet] public async Task <IHttpActionResult> GetByClave(string clave)
                                                       {
                                                           try {
                                                               List <DAExterno> DAExterno = new List <DAExterno>();
                                                               var colaboracionDAExterno  = await _autoresDAExterno.GetAllColaboracion(clave);

                                                               var aux = await _repository.GetByIdColaboracion(colaboracionDAExterno);

                                                               foreach (var f in aux)
                                                               {
                                                                   DAExterno.Add(f);
                                                               }
                                                               var result = await _repository.GetByClave(clave);

                                                               foreach (var x in result)
                                                               {
                                                                   DAExterno.Add(x);
                                                               }
                                                               //ObtenerPatrimoniales
                                                               var solicitudes = await _SolicitudesDARepository.GetByClave(clave);

                                                               var solicitudesParticipacion = await _SolicitudParticiantesDARepository.GetByClave(clave);

                                                               List <SolicitudesDA> SolicitudesDA = new List <SolicitudesDA>();
                                                               foreach (var item in solicitudes)
                                                               {
                                                                   SolicitudesDA.Add(item);
                                                               }
                                                               foreach (var item in solicitudesParticipacion)
                                                               {
                                                                   var solicitud = await _SolicitudesDARepository.GetById(item.SolicitudesDAId); SolicitudesDA.Add(solicitud);
                                                               }
                                                               var resultadosDA = SolicitudesDA.GroupBy(x => x.SolicitudesDAId).Select(y => y.First());
                                                               DAExterno.RemoveAll(item => item == null);
                                                               var resu = DAExterno.GroupBy(x => x.DAExternoId).Select(y => y.First());
                                                               List <DAExterno> DAExterno2 = new List <DAExterno>();
                                                               foreach (var item in resu)
                                                               {
                                                                   DAExterno2.Add(item);
                                                               }
                                                               foreach (var item in resultadosDA)
                                                               {
                                                                   DAExterno Obj = new DAExterno();
                                                                   Obj.DAExternoId     = item.SolicitudesDAId;
                                                                   Obj.Titulo          = item.TituloObra;
                                                                   Obj.RamaDAId        = item.RamaDAId;
                                                                   Obj.RamaDA          = item.RamaDA;
                                                                   Obj.FechaValidacion = item.Fecha;
                                                                   Obj.Sintesis        = "Patrimonio";
                                                                   DAExterno2.Add(Obj);
                                                               }
                                                               /////////


                                                               return(Ok(DAExterno2));
                                                           }
                                                           catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                                                                                 return(InternalServerError(e)); }
                                                       }
        public async Task <DAExterno> Create(DAExterno Obj)
        {
            try
            {
                var result = _ctx.DAExterno.Add(Obj);
                await _ctx.SaveChangesAsync();

                return(result);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task UpdateEstado(DAExterno Obj)
        {
            try
            {
                var result = await _ctx.DAExterno.FirstOrDefaultAsync(e => e.DAExternoId == Obj.DAExternoId);

                if (result != null)
                {
                    result.EstadoFlujoId = Obj.EstadoFlujoId;

                    await _ctx.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task Update(DAExterno Obj)// UpdateSolicitud
        {
            try
            {
                var result = await _ctx.DAExterno.FirstOrDefaultAsync(e => e.DAExternoId == Obj.DAExternoId);

                if (Obj.EstadoFlujoId == 1 && result.EstadoFlujoId == 3)
                {
                    await new NuevoOCRepository().DeleteId("DA", result.DAExternoId + "");
                }
                if (result != null)
                {
                    _ctx.Entry(result).CurrentValues.SetValues(Obj);

                    await _ctx.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
                                                       [Authorize] public async Task <IHttpActionResult> Create(DAExterno Obj)
                                                       {
                                                           try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                 var result = await _repository.Create(Obj);

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

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

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

                                                                                 return(InternalServerError(e)); }
                                                       }
                                                       public async Task <IHttpActionResult> Update(DAExterno Obj)
                                                       {
                                                           try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                 if (Obj.Adjunto != null)
                                                                 {
                                                                     //Elimar archivo
                                                                     if (Obj.Adjunto.nombre == "eliminar")
                                                                     {
                                                                         int id = Convert.ToInt32(Obj.AdjuntoId);
                                                                         Obj.AdjuntoId = null;
                                                                         await _repository.Update(Obj);

                                                                         await _adjuntoRepo.Delete(id);

                                                                         return(Ok());
                                                                     }
                                                                     ///Agregar archivo al editar
                                                                     if (Obj.Adjunto.AdjuntoId == 0)
                                                                     {
                                                                         Adjunto key = await _adjuntoRepo.CreateAd(Obj.Adjunto);

                                                                         Obj.AdjuntoId         = key.AdjuntoId;
                                                                         Obj.Adjunto.AdjuntoId = key.AdjuntoId;
                                                                         await _repository.Update(Obj);

                                                                         return(Ok(key));
                                                                     }
                                                                 }


                                                                 //solución de ALAN replicada
                                                                 if (Obj.Adjunto != null)
                                                                 {
                                                                     Obj.AdjuntoId = Obj.Adjunto.AdjuntoId;
                                                                 }
                                                                 await _repository.Update(Obj);

                                                                 ////Agregar a OC
                                                                 if (Obj.EstadoFlujoId == 3)
                                                                 {
                                                                     await new NuevoOCRepository().Create(
                                                                         new NuevoOC("CH",
                                                                                     "DA",
                                                                                     Obj.Titulo,
                                                                                     "IndexCH.html#/detallesdaexterno/" + Obj.DAExternoId + "/",
                                                                                     Obj.DAExternoId + ""
                                                                                     ));
                                                                 }
                                                                 return(Ok(Obj)); }
                                                           catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                                                                                 return(InternalServerError(e)); }
                                                       }