public async Task <IHttpActionResult> getFiles()
                                                               { //id is FUENTE de proyecto: 'RIIE ACH'
                                                                   var top = 5;
                                                                   var max = 0;

                                                                   try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                         //SIGCOEntities.
                                                                         //SIGCOEntities sigco = new SIGCOEntities(System.Configuration.ConfigurationManager.ConnectionStrings["SIGCOEntities"].ConnectionString);
                                                                         var sPath = ConfigurationManager.AppSettings["pathAdjunto"] + "ITFv2/";
                                                                         var stop  = ConfigurationManager.AppSettings["top"];
                                                                         top = Convert.ToInt32(stop);
                                                                         try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                               if (!Directory.Exists(sPath))
                                                                               {
                                                                                   Directory.CreateDirectory(sPath);
                                                                               }
                                                                         }
                                                                         catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                                                                                               throw new Exception("No es posible CreateDirectory en el servidor", e); }
                                                                         InformeTFRepository itfR = new InformeTFRepository();
                                                                         var itfs = await itfR.getAllBySinFKs();

                                                                         JavaScriptSerializer jss = new JavaScriptSerializer();
                                                                         var queryString          = "select [id],[numProyecto],[descriptores],[tituloOC],[numInforme],[fechaEdicion],[idTipoFormato],[distribucion],[tipoColeccion],[clasificacion],[capturista],[supervisor],[notas],[numAdquisicion],[volumen],[ejemplar],[fechaRecepcion],[fechaCaptura],[archivo],[proceso],[idTipoOC],[tipoArchivo],[nombreArchivo],[idGerencia],[idDivision],[idInforme],[estadoOC] ,[ultraConfidencial]  FROM [SIGCO].[MT].[tOC] order by id"; /* todo menos resumen*/
                                                                         var OCv2 = await Task.Run(() => { return(CreateCommandSIGCO2(queryString)); });

                                                                         var JSONresult = JsonConvert.SerializeObject(OCv2);
                                                                         var itfv2      = jss.Deserialize <List <ItfV2> >(JSONresult);
                                                                         int n          = 0;
                                                                         List <AdjuntoITF> AdjuntoITFs = new List <AdjuntoITF>();
                                                                         AdjuntoITF        AdjuntoITF  = new AdjuntoITF();
                                                                         Adjunto           ad          = new Adjunto();
                                                                         List <String>     itfSinArchivoSegunConsulta = new List <string>();
                                                                         foreach (var itf in itfs)
                                                                         {
                                                                             n++;
                                                                             if (itf.idSigco2 != null)
                                                                             {
                                                                                 var idSigco2 = itf.idSigco2.Value;
                                                                                 var itfDEv2  = itfv2.Find(x => x.id == idSigco2);

                                                                                 if (itfDEv2 != null)
                                                                                 {
                                                                                     queryString = "select * FROM[SIGCO].[MT].[tOCArchivo] where id=" + idSigco2;
                                                                                     var entities = await Task.Run(() => { return(CreateCommandSIGCO2(queryString)); });

                                                                                     if (entities != null)
                                                                                     {
                                                                                         foreach (DataRow row in entities.Rows)
                                                                                         {
                                                                                             foreach (DataColumn col in entities.Columns)
                                                                                             {
                                                                                                 //Console.WriteLine(row[col]);
                                                                                                 col.AllowDBNull = col.AllowDBNull;
                                                                                                 col.Caption     = col.Caption;
                                                                                                 if (col.Caption.Equals("archivo") && !String.IsNullOrEmpty(itfDEv2.nombreArchivo))
                                                                                                 {
                                                                                                     var continuar = true;
                                                                                                     try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                                                           //Escribe.Write(row[col].GetType());
                                                                                                           File.WriteAllBytes(sPath + itfDEv2.nombreArchivo, (byte[])row[col]); }
                                                                                                     catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                                                                                                                           continuar = false;
                                                                                                                           itfSinArchivoSegunConsulta.Add(itf.InformeTecnicoFinalId + "@@" + e.Message); }
                                                                                                     if (continuar)
                                                                                                     {
                                                                                                         AdjuntoITF = new AdjuntoITF();
                                                                                                         AdjuntoITF.ITFgeneralId = itf.InformeTecnicoFinalId;
                                                                                                         AdjuntoITF.Procesado    = false;
                                                                                                         ad              = new Adjunto();
                                                                                                         ad.ModuloId     = "MT";
                                                                                                         ad.nombre       = itfDEv2.nombreArchivo;
                                                                                                         ad.RutaCompleta = sPath + itfDEv2.nombreArchivo;

                                                                                                         AdjuntoITF.Adjunto = ad;
                                                                                                         AdjuntoITFs.Add(AdjuntoITF);
                                                                                                     }
                                                                                                     break;
                                                                                                 }
                                                                                                 else
                                                                                                 {
                                                                                                     if (col.Caption.Equals("archivo") && String.IsNullOrEmpty(itfDEv2.nombreArchivo))
                                                                                                     {
                                                                                                         itfSinArchivoSegunConsulta.Add(itf.InformeTecnicoFinalId);
                                                                                                     }
                                                                                                 }
                                                                                                 var fooo = "";
                                                                                             }
                                                                                             break;
                                                                                         }
                                                                                     }
                                                                                 }
                                                                             }
                                                                             if (n > top)
                                                                             {
                                                                                 break;
                                                                             }
                                                                         }
                                                                         var saveAll = await new AdjuntoITFRepository().CreateAllSeg(AdjuntoITFs);
                                                                         var r       = new { resumen = "ok " + n + " saveAll:" + saveAll, itfSinArchivoSegunConsulta = itfSinArchivoSegunConsulta };
                                                                         return(Ok(r)); }
                                                                   catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                                                                                         e.Source = max + "";
                                                                                         return(InternalServerError(e)); }
                                                               }
                                                               public async Task <IHttpActionResult> GetAllOCsSIGCO2()
                                                               {
                                                                   var max = 0;

                                                                   try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                         //SIGCOEntities.
                                                                         //SIGCOEntities sigco = new SIGCOEntities(System.Configuration.ConfigurationManager.ConnectionStrings["SIGCOEntities"].ConnectionString);
                                                                         var queryString = "select *  FROM [SIGCO].[MT].[tOC]";
                                                                         var entities    = await Task.Run(() => { return(CreateCommandSIGCO2(queryString)); });

                                                                         string JSONresult;
                                                                         JSONresult = JsonConvert.SerializeObject(entities);
                                                                         JavaScriptSerializer jss = new JavaScriptSerializer();
                                                                         jss.MaxJsonLength = 5000000;


                                                                         //2097152
                                                                         //3259099
                                                                         var itfv2 = jss.Deserialize <List <ItfV2> >(JSONresult);
                                                                         InformeTecnicoFinal        itf   = new InformeTecnicoFinal();
                                                                         List <InformeTecnicoFinal> lista = new List <InformeTecnicoFinal>();
                                                                         DateTime           actual        = DateTime.Now;
                                                                         DateTime           actualMinus12 = actual.AddYears(-12);
                                                                         ITFgeneral         gral          = null;
                                                                         ProyectoRepository repProy       = new ProyectoRepository();
                                                                         var proyectos = await repProy.GetAllNumerosProyectoTRIM();

                                                                         var proyectosv2 = itfv2.Select(x => x.numProyecto).ToList <String>();

                                                                         var dif = proyectosv2.Except(proyectos);

                                                                         string print = string.Join("','", proyectos.ToArray());
                                                                         TransferenciaRIIEController ctrl = new TransferenciaRIIEController();
                                                                         ctrl.Configuration = new HttpConfiguration();
                                                                         var itfv2ByProyectos = itfv2.FindAll(e => proyectos.Contains(e.numProyecto.Trim()));
                                                                         foreach (var i2 in itfv2ByProyectos)
                                                                         {
                                                                             //if (!String.IsNullOrEmpty(i2.numProyecto))
                                                                             //{
                                                                             //    if (i2.numProyecto.Contains("14342"))
                                                                             //    {
                                                                             //        var xyz = 22;
                                                                             //    }
                                                                             //}

                                                                             if (i2.estadoOC != 1 || String.IsNullOrEmpty(i2.numProyecto) || String.IsNullOrEmpty(i2.resumen))
                                                                             {
                                                                                 continue;
                                                                             }


                                                                             gral = new ITFgeneral();
                                                                             itf  = new InformeTecnicoFinal();
                                                                             try {
                                                                                 itf.InformeTecnicoFinalId  = String.Concat(i2.id, "-", i2.numProyecto.Trim(), "-", i2.idInforme).Trim();
                                                                                 itf.ClasificacionSignatura = i2.clasificacion.Trim();
                                                                                 itf.Titulo           = i2.tituloOC.Trim();
                                                                                 itf.EstadoITFFlujoId = 4;
                                                                                 itf.ProyectoId       = i2.numProyecto.Trim();

                                                                                 itf.idSigco2                  = i2.id;
                                                                                 itf.idInformeRIIE             = i2.idInforme;
                                                                                 itf.ultraConfidencial         = i2.ultraConfidencial;
                                                                                 itf.FechaAutorizacion         = i2.fechaRecepcion;
                                                                                 itf.FechaPublicacion          = i2.fechaCaptura;
                                                                                 itf.ClaveUnidadOrganizacional = i2.idGerencia.Trim();
                                                                                 itf.ClaveUnidadPadre          = i2.idDivision.Trim();

                                                                                 if (itf.FechaPublicacion != null)
                                                                                 {
                                                                                     try {
                                                                                         itf.AnioElaboracion = itf.FechaPublicacion.Value.Year;
                                                                                     }
                                                                                     catch (Exception exY) { }
                                                                                 }
                                                                                 itf.NumInforme = i2.numInforme.Trim();

                                                                                 gral.ITFgeneralId = itf.InformeTecnicoFinalId;
                                                                                 gral.Resumen      = i2.resumen.Trim();
                                                                                 gral.AccesoTipo   = 2;
                                                                                 if (i2.fechaCaptura != null)
                                                                                 {
                                                                                     if (i2.fechaCaptura < actualMinus12)
                                                                                     {
                                                                                         gral.AccesoTipo = 1;
                                                                                     }
                                                                                 }

                                                                                 itf.ITFgeneral = gral;
                                                                             }catch (Exception e) { log.Warn(new MDCSet(this.ControllerContext.RouteData) + "<for>", e); }
                                                                             ctrl.Validate(itf);
                                                                             if (ctrl.ModelState.IsValid)
                                                                             {
                                                                                 lista.Add(itf);
                                                                             }
                                                                             else
                                                                             {
                                                                                 log.Warn(new MDCSet(this.ControllerContext.RouteData), new Exception("!ModelState.IsValid"));
                                                                                 ctrl = new TransferenciaRIIEController();
                                                                                 ctrl.Configuration = new HttpConfiguration();
                                                                                 var foo = "";
                                                                             }
                                                                         }
                                                                         //lista.Add(itf);
                                                                         InformeTFRepository repo = new InformeTFRepository();
                                                                         var fullsave             = await repo.CreateAll(lista);

                                                                         var obj = new
                                                                         {
                                                                             proyectosv2 = proyectosv2,
                                                                             proyectos   = proyectos,
                                                                             dif         = dif,
                                                                             fullsave    = fullsave
                                                                         };
                                                                         return(Ok(obj)); }
                                                                   catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                                                                                         e.Source = max + "";
                                                                                         return(InternalServerError(e)); }
                                                               }
                                                               public async Task <IHttpActionResult> SetAutores()
                                                               { //id is FUENTE de proyecto: 'RIIE ACH'
                                                                   var max = 0;

                                                                   try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                         //SIGCOEntities.
                                                                         //SIGCOEntities sigco = new SIGCOEntities(System.Configuration.ConfigurationManager.ConnectionStrings["SIGCOEntities"].ConnectionString);
                                                                         var queryString = "select *  FROM [SIGCO].[MT].[tAutorOC]";
                                                                         var entities    = await Task.Run(() => { return(CreateCommandSIGCO2(queryString)); });

                                                                         string JSONresult;
                                                                         JSONresult = JsonConvert.SerializeObject(entities);
                                                                         JavaScriptSerializer jss    = new JavaScriptSerializer();
                                                                         var                 autores = jss.Deserialize <List <TAutorOC> >(JSONresult);
                                                                         TAutorOC            autor   = new TAutorOC();
                                                                         InformeTFRepository itfR    = new InformeTFRepository();
                                                                         var                 itfIds  = await itfR.getAllBySinFKs();

                                                                         var a = new AutorITF();
                                                                         AutorITFRepository autR = new AutorITFRepository();

                                                                         foreach (var i in itfIds)
                                                                         {
                                                                             int ids2 = i.idSigco2 == null ? 0 : i.idSigco2.Value;
                                                                             var x    = autores.Where(y => y.idOC == ids2.ToString()).ToList();
                                                                             if (x != null)
                                                                             {
                                                                                 foreach (var e in x)
                                                                                 {
                                                                                     a = new AutorITF();
                                                                                     if (e.idOC.Contains("3011"))
                                                                                     {
                                                                                         var foo = "";
                                                                                     }
                                                                                     a.AutorITFId            = String.Concat(e.idOC.Trim(), "-" + e.numEmp.Trim()).Trim();
                                                                                     a.InformeTecnicoFinalId = i.InformeTecnicoFinalId.Trim();
                                                                                     a.Estado     = true;
                                                                                     a.ClaveAutor = e.numEmp.Trim();
                                                                                     try { log.Info(new MDCSet(this.ControllerContext.RouteData));
                                                                                           await autR.Create(a); }
                                                                                     catch (Exception ex)
                                                                                     {
                                                                                         autR = new AutorITFRepository();
                                                                                     }
                                                                                 }
                                                                             }
                                                                         }

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

                                                                                         e.Source = max + "";
                                                                                         return(InternalServerError(e)); }
                                                               }
                                                                public async Task <IHttpActionResult> GetAll(String id)
                                                                {
                                                                    try{ log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(id));
                                                                         InformeTFRepository itf = new InformeTFRepository();
                                                                         var countInsumos        = await dbInsumo.CountGetByClave(id);

                                                                         var countITF = await itf.CountITFrevisionByResponsable(id);

                                                                         var result = new {
                                                                             insumos = countInsumos,
                                                                             itfs    = countITF
                                                                         };
                                                                         return(Ok(result)); }
                                                                    catch (Exception e) { log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                                                                                          return(InternalServerError(e)); }
                                                                }
        public async Task <IHttpActionResult> PublicarITF(AprobacionRechazoData data)
        {
            //id de ITF
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                if (String.IsNullOrEmpty(data.IdElemento))
                {
                    throw new Exception("Identificador de ITF nulo o vacio");
                }
                var accion = "rechazado";
                var justificacionOcomentarios = "";
                try
                {
                    log.Info(new MDCSet(this.ControllerContext.RouteData));
                    if (data.Aprobacion == true)
                    {
                        if (String.IsNullOrEmpty(data.ClasificacionSignatura) || String.IsNullOrEmpty(data.NumInventario) || String.IsNullOrEmpty(data.NumInforme))
                        {
                            throw new Exception("No se proporcionaron todos los elementos del formulario");
                        }

                        var update = await dbITF.updateClasificacionSignatura(data.IdElemento, data.ClasificacionSignatura, data.NumInforme, data.NumInventario);

                        if (!update)
                        {
                            throw new Exception("no fue posible agregar ClasificacionSignatura");
                        }
                    }
                    dbITF = new InformeTFRepository();
                    var result = await dbITF.updateEstadoFlujo(data.IdElemento,
                                                               data.Aprobacion?EstadoITFFlujoIds.Publicado : EstadoITFFlujoIds.EnEdicion);//el Admin autoriza y cambia a 2: autorizado/aprobado

                    if (data.Aprobacion == true)
                    {
                        accion = "aprobado";
                    }
                    else
                    {
                        justificacionOcomentarios = "<br/>Justificaci&oacute;n: " + data.JustificacionOcomentarios;
                    }

                    //una vez aprobado...
                    var solicitud = await dbITF.GetSolicitudRevisionITF(data.IdElemento, EstadoSolicitudIds.Pendiente);

                    solicitud.EstadoSolicitudId = data.Aprobacion ? EstadoSolicitudIds.Aprobado : EstadoSolicitudIds.Denegada;
                    solicitud.FechaAtencion     = DateTime.Now;
                    result = await dbITF.UpdateSolicitudRevisionITF(solicitud);

                    //mandar correo


                    try
                    {
                        log.Info(new MDCSet(this.ControllerContext.RouteData));
                        var itf = await dbITF.GetIncludeProject(data.IdElemento);

                        var interesados = await dbITF.getJefeAndResponsableUnidad_ByPRoyecto(itf.Proyecto);

                        Correo correo = new Correo();
                        correo.Modulo       = "Memoria Tecnológica";
                        correo.Empleado     = SimpleSessionPersister.PersonaId;
                        correo.Seccion      = "ITF";
                        correo.TipoCorreo   = "AprobacionRechazoEnPublicacion";
                        correo.Descripcion1 = String.Concat(
                            "Se le notifica que el Informe Técnico Final del proyecto <b>",
                            itf.Proyecto.ProyectoId,
                            "  --  ", itf.Proyecto.Nombre, "</b> fué <b>", accion, "</b> por el administrador de MT",
                            justificacionOcomentarios
                            );
                        getCorreoConfig conf        = new getCorreoConfig();
                        SendCorreo      send        = new SendCorreo();
                        var             enviaCorreo = await send.Send(interesados.ToList(), correo, conf);
                    }
                    catch (Exception e)
                    {
                        log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                        //dbITF = null;
                        //dbITF = new InformeTFRepository();
                    }
                }
                catch (Exception e)
                {
                    log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                    //dbITF = null;
                    //dbITF = new InformeTFRepository();
                }

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

                return(InternalServerError(e));
            }
        }
 public InformeTecnicoFinalController()
 {
     _proyectosRepo = new ProyectoRepository();
     dbITF          = new InformeTFRepository();
 }
        public async Task <IHttpActionResult> enviarARevision(String id)
        {
            //id de ITF
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                if (String.IsNullOrEmpty(id))
                {
                    throw new Exception("Identificador de ITF nulo o vacio");
                }
                var itf = await dbITF.GetIncludeProject(id);

                await dbITF.updateEstadoFlujo(itf.InformeTecnicoFinalId, 1);//--> Por autorizar

                var revisor = await dbITF.getPersonaResponsableByProyecto(itf.Proyecto);

                Correo correo = new Correo();
                correo.Modulo       = "Memoria Tecnológica";
                correo.Empleado     = SimpleSessionPersister.PersonaId;
                correo.Seccion      = "ITF";
                correo.TipoCorreo   = "solicitudDeRevisionITF";
                correo.Descripcion1 = String.Concat(
                    " se ha generado una solicitud de revisión del Informe Técnico Final del proyecto <b>",
                    itf.Proyecto.ProyectoId,
                    "  --  ", itf.Proyecto.Nombre, "</b>"
                    );
                try
                {
                    log.Info(new MDCSet(this.ControllerContext.RouteData));
                    getCorreoConfig conf   = new getCorreoConfig();
                    SendCorreo      send   = new SendCorreo();
                    var             result = await send.Send(revisor, correo, conf);
                }
                catch (Exception e)
                {
                    log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                    dbITF = null;
                    dbITF = new InformeTFRepository();
                }

                try
                {
                    log.Info(new MDCSet(this.ControllerContext.RouteData));
                    SolicitudRevisionITF solITF = new SolicitudRevisionITF();
                    solITF.InformeTecnicoFinalId   = itf.InformeTecnicoFinalId;
                    solITF.ClavePersonaSolicitante = SimpleSessionPersister.PersonaId;
                    DateTime localDate = DateTime.Now;
                    //ConfigAPI.cultureName
                    solITF.FechaSolicitud    = localDate;
                    solITF.EstadoSolicitudId = EstadoSolicitudIds.Pendiente;
                    solITF.ClaveUnidad       = itf.Proyecto.UnidadOrganizacionalId;
                    await dbITF.CreateSolicitudRevisionITF(solITF);

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

                return(InternalServerError(e));
            }
        }