public JsonResult NotificarEnvioTramite(string HomoclaveEnviada, string ProyectoEnviado, string RFCRL)
        {
            try
            {
                EstatusTramite EstatusTramiteEnviado = new EstatusTramite();
                EstatusTramiteEnviado.estatus       = "ENVIADO";
                EstatusTramiteEnviado.fechaRegistro = DateTime.Now.ToString();
                EstatusTramiteEnviado.nota          = "Enviado a dependencia desde ENREL";
                EstatusTramiteEnviado.resolucion    = "PENDIENTE";

                int IdProyecto = Convert.ToInt32(ProyectoEnviado);

                LogicaTramite.L_ActualizarEstatusTramiteDesdeENREL(IdProyecto, HomoclaveEnviada);
                WSBPM_Nivel3.ProcessNivel3PortTypeClient EnviarEstatus = new WSBPM_Nivel3.ProcessNivel3PortTypeClient();
                EnviarEstatus.receiveTask(ProyectoEnviado, HomoclaveEnviada, "enviado", 0);
                MetodoGeneral.RegistroDeError("IDPROYECTO = '" + IdProyecto.ToString() + "', HOMOCLAVE ='" + HomoclaveEnviada + "', ESTATUS = 'enviado'", "Invocación Nivel 3 - ");
                MetodoGeneral.RegistroDeError(EnviarEstatus.Endpoint.Address.ToString(), "Invocación Nivel 3 - ");
                string FechaHora = DateTime.Now.ToString("dd / MMM / yyy hh:mm:ss");

                //Enviar correo a dependencia y RL:
                int IdProyectoRecibido = Convert.ToInt32(IdProyecto);
                NotificacionInicioTramite DatosNotificacion = new NotificacionInicioTramite();
                DatosNotificacion = LogicaProyecto.L_SeleccionarDatosNotificacionInicioTramite(IdProyecto, HomoclaveEnviada, RFCRL);

                //Primer Correo (Dependencia):
                MailMessage email = new MailMessage("*****@*****.**", DatosNotificacion.CorreoResponsable);
                email.To.Add(new MailAddress(ConfigurationManager.AppSettings["CorreoAdministrador"].ToString()));
                email.Subject = "Notificación de inicio de trámite desde ENREL";

                //Primer Correo - Obtener la plantilla en HTML:
                string ContenidoCorreo = "";
                string path            = ConfigurationManager.AppSettings["Html_NotificacionInicioTramiteDependencia"].ToString();
                ContenidoCorreo = System.IO.File.ReadAllText(path);

                //Primer Correo - Datos del correo
                ContenidoCorreo = ContenidoCorreo.Replace("#IdGlobalMacro#", DatosNotificacion.IdGlobal);
                ContenidoCorreo = ContenidoCorreo.Replace("#FechaHora#", FechaHora);
                ContenidoCorreo = ContenidoCorreo.Replace("#Tecnologia#", DatosNotificacion.Tecnologia);
                ContenidoCorreo = ContenidoCorreo.Replace("#Homoclave#", DatosNotificacion.HomoclaveGeneral);
                ContenidoCorreo = ContenidoCorreo.Replace("#Dependencia#", DatosNotificacion.Dependencia);
                ContenidoCorreo = ContenidoCorreo.Replace("#RFCRL#", RFCRL);

                AlternateView htmlView = AlternateView.CreateAlternateViewFromString(ContenidoCorreo, null, "text/html");

                //Primer Correo - Obtener imágenes:

                LinkedResource Logotipo_SENER = new LinkedResource(ConfigurationManager.AppSettings["Logotipo_SENER"].ToString());
                Logotipo_SENER.ContentId = "Logotipo_SENER";
                htmlView.LinkedResources.Add(Logotipo_SENER);

                LinkedResource Logotipo_MEXICO = new LinkedResource(ConfigurationManager.AppSettings["Logotipo_MEXICO"].ToString());
                Logotipo_MEXICO.ContentId = "Logotipo_MEXICO";
                htmlView.LinkedResources.Add(Logotipo_MEXICO);

                email.AlternateViews.Add(htmlView);
                email.IsBodyHtml = true;
                email.Priority   = MailPriority.High;

                SmtpClient smtp = new SmtpClient();
                smtp.Host                  = "172.16.70.110";
                smtp.Port                  = 25;
                smtp.EnableSsl             = false;
                smtp.UseDefaultCredentials = false;
                smtp.Send(email);
                email.Dispose();

                //Segundo Correo (RL):
                email = new MailMessage("*****@*****.**", DatosNotificacion.CorreoRL);
                email.To.Add(new MailAddress(ConfigurationManager.AppSettings["CorreoAdministrador"].ToString()));
                email.Subject = "Notificación de inicio de trámite desde ENREL";

                //Segundo Correo - Obtener la plantilla en HTML:
                ContenidoCorreo = "";
                path            = ConfigurationManager.AppSettings["Html_NotificacionInicioTramiteRL"].ToString();
                ContenidoCorreo = System.IO.File.ReadAllText(path);

                //Segundo Correo - Datos del correo
                ContenidoCorreo = ContenidoCorreo.Replace("#IdGlobalMacro#", DatosNotificacion.IdGlobal);
                ContenidoCorreo = ContenidoCorreo.Replace("#FechaHora#", FechaHora);
                ContenidoCorreo = ContenidoCorreo.Replace("#Tecnologia#", DatosNotificacion.Tecnologia);
                ContenidoCorreo = ContenidoCorreo.Replace("#Homoclave#", DatosNotificacion.HomoclaveGeneral);
                ContenidoCorreo = ContenidoCorreo.Replace("#Dependencia#", DatosNotificacion.Dependencia);
                ContenidoCorreo = ContenidoCorreo.Replace("#NombreRL#", DatosNotificacion.NombreRL);

                htmlView = AlternateView.CreateAlternateViewFromString(ContenidoCorreo, null, "text/html");

                //Segundo Correo - Obtener imágenes:

                Logotipo_SENER           = new LinkedResource(ConfigurationManager.AppSettings["Logotipo_SENER"].ToString());
                Logotipo_SENER.ContentId = "Logotipo_SENER";
                htmlView.LinkedResources.Add(Logotipo_SENER);

                Logotipo_MEXICO           = new LinkedResource(ConfigurationManager.AppSettings["Logotipo_MEXICO"].ToString());
                Logotipo_MEXICO.ContentId = "Logotipo_MEXICO";
                htmlView.LinkedResources.Add(Logotipo_MEXICO);

                email.AlternateViews.Add(htmlView);
                email.IsBodyHtml = true;
                email.Priority   = MailPriority.High;

                smtp                       = new SmtpClient();
                smtp.Host                  = "172.16.70.110";
                smtp.Port                  = 25;
                smtp.EnableSsl             = false;
                smtp.UseDefaultCredentials = false;
                smtp.Send(email);
                email.Dispose();

                return(new JsonResult
                {
                    Data = "ok"
                });
            }
            catch (Exception ex)
            {
                MetodoGeneral.RegistroDeError(ex.Message, "Proyectos: Enviar Trámite a BPM");
                return(new JsonResult
                {
                    Data = "error"
                });
            }
        }
        public ActionResult ProyectoTramites()
        {
            string IdEstatusProyecto = "NO CAPTURADO";
            string resultado         = "";
            bool   ErrorBPM          = false;

            try
            {
                CatUsuarios Usuario = (CatUsuarios)Session["Usuario"];
                if (Usuario == null || Usuario.U_IdTipoUsuario != 2)
                {
                    TempData["notice"] = "La sesión ha expirado.";
                    return(RedirectToAction("Logout", "Home"));
                }

                int          Idproyecto    = Convert.ToInt32(Request.Form["IdProyecto"]);
                CatProyectos Proyecto      = LogicaProyecto.L_DetallesProyectos(Idproyecto);
                string       IdProyectoBPM = Idproyecto.ToString();
                string       Tecnologia    = Proyecto.P_Tecnologia.ToLower();

                //Crea la instancia de los WS de BPM que vaya a utilizar
                WSBPM_Nivel0.ProcessNivel0PortTypeClient CrearProyectos = new WSBPM_Nivel0.ProcessNivel0PortTypeClient();
                WSBPM_Nivel3.ProcessNivel3PortTypeClient EnviarEstatus  = new WSBPM_Nivel3.ProcessNivel3PortTypeClient();

                IdEstatusProyecto = LogicaProyecto.L_SeleccionarProyectoSeguimiento(Idproyecto);

                if (IdEstatusProyecto == "CAPTURADO")
                {
                    //COMUNICACIÓN: Enviar proyecto a BPM
                    CrearProyectos.InicioNivel0(Idproyecto.ToString(), Proyecto.P_Tecnologia.ToLower());
                    LogicaProyecto.L_ActualizarProyectoSeguimiento(Idproyecto, 2);
                    MetodoGeneral.RegistroDeError("Datos {IdProyecto: " + Idproyecto.ToString() + ", Tecnología: " + Proyecto.P_Tecnologia.ToLower() + "}", "Invocación Nivel 0 -");
                    MetodoGeneral.RegistroDeError(CrearProyectos.Endpoint.Address.ToString(), "Invocación Nivel 0 -");
                }

                IdEstatusProyecto = LogicaProyecto.L_SeleccionarProyectoSeguimiento(Idproyecto);

                if (IdEstatusProyecto == "ENVIADOBPM")
                {
                    //COMUNICACIÓN: Enviar proyecto a gobmx
                    resultado = MetodoGeneral.RegistrarReferenciaMacroTramite(Proyecto.P_IdGlobal, Usuario.U_RFCRepresentanteAsociado);
                    LogicaProyecto.L_ActualizarProyectoSeguimiento(Idproyecto, 3);
                    LogicaProyecto.L_ActualizarProyectoSeguimiento(Idproyecto, 4);
                }

                IdEstatusProyecto = LogicaProyecto.L_SeleccionarProyectoSeguimiento(Idproyecto);

                if (IdEstatusProyecto == "INICIADO" || IdEstatusProyecto == "SUSPENDIDO")
                {
                    //Preguntar estatus GOBMX
                    RespuestaConsultaMacroTramite Resultado = MetodoGeneral.ConsultarMacroTramite(Proyecto.P_IdGlobal);

                    //Guardar estatus de GOBMX en BD ENREL
                    if (Resultado.cadenaInteroperabilidad != null && Resultado.cadenaInteroperabilidad.Count > 0)
                    {
                        LogicaTramite.L_ActualizarEstatusTramite(Resultado, Proyecto.P_IdProyecto);
                    }

                    //Obtener estatus de los trámites ya en la base de datos que tienen que ser actualizados en BPM:
                    List <CatTramites> ListaTramitesActualizarBPM = LogicaTramite.L_SeleccionarProyectoTramitesParaEnviarBPM(Idproyecto);

                    //COMUNICACIÓN: Reporta estatus a BPM
                    try
                    {
                        foreach (CatTramites Tramite in ListaTramitesActualizarBPM)
                        {
                            if (Tramite.T_ConfirmacionBPM == false)
                            {
                                EnviarEstatus.receiveTask(Idproyecto.ToString(), Tramite.T_HomoClave, Tramite.T_Estatus.ToLower(), Tramite.T_Prorroga);
                                MetodoGeneral.RegistroDeError("IDPROYECTO = '" + Idproyecto.ToString() + "', HOMOCLAVE ='" + Tramite.T_HomoClave + "', ESTATUS = '" + Tramite.T_Estatus.ToLower() + "'", "Invocación Nivel 3 - ");
                                MetodoGeneral.RegistroDeError(EnviarEstatus.Endpoint.Address.ToString(), "Invocación Nivel 3 - ");
                            }
                            Thread.Sleep(100);
                        }
                    }
                    catch (Exception ex)
                    {
                        Session["TipoAlerta"] = "Error";
                        MetodoGeneral.RegistroDeError(ex.Message, "ProyectoTramites");
                        ErrorBPM = true;
                    }
                }



                IdEstatusProyecto = LogicaProyecto.L_SeleccionarProyectoSeguimiento(Idproyecto);

                switch (IdEstatusProyecto)
                {
                case "CAPTURADO":
                    Session["TipoAlerta"] = "Error";
                    TempData["notice"]    = "El proyecto se registró en ENREL pero no ha sido sido enviado al gestor de trámites.";
                    return(RedirectToAction("Index"));

                case "ENVIADOBPM":
                    Session["TipoAlerta"] = "Error";
                    TempData["notice"]    = "El proyecto no ha sido registrado en Gobmx.";
                    return(RedirectToAction("Index"));

                case "ENVIADOGOBMX":
                    Session["TipoAlerta"] = "Error";
                    TempData["notice"]    = "El proyecto ha sido registrado en Gobmx pero ocurrió un error inesperado";
                    return(RedirectToAction("Index"));

                case "CONCLUIDO":
                    bool Resultado = MetodoGeneral.NotificarEstatusMacroTramite(Proyecto.P_IdGlobal, "1", "1");
                    if (Resultado)
                    {
                        LogicaProyecto.L_ActualizarProyectoSeguimiento(Idproyecto, 7);
                    }
                    break;

                default: break;
                }

                //Obtener estatus de los trámites ya en la base de datos:
                Thread.Sleep(1000);
                List <CatTramites> ListaTramites = LogicaTramite.L_SeleccionarProyectoTramites(Idproyecto, Proyecto.P_IdGlobal, Usuario.U_RFCRepresentanteAsociado, Session["OpenId"].ToString());

                CatEmpresas Empresa         = LogicaEmpresa.L_DetallesEmpresa(Proyecto.P_IdEmpresa);
                int         IdRepresentante = (Int32)Session["IdRepresentanteActual"];
                CatRepresentantesLegales RepresentanteLegal = LogicaRepresentanteLegal.L_DetallesRepresentanteLegal(IdRepresentante);
                List <CatEstatusTramite> TablaEstatus       = LogicaTramite.L_TablaEstatusTramite();
                CatAvanceTramites        AvanceTramites     = LogicaTramite.L_AvanceTramites(ListaTramites);
                CargarDatosProyecto(AvanceTramites, Proyecto, Empresa, RepresentanteLegal);

                if (ErrorBPM)
                {
                    Session["TipoAlerta"] = "Error";
                    TempData["notice"]    = "La información podría no estar actualizada";
                }

                return(View(ListaTramites));
            }
            catch (Exception ex)
            {
                Session["TipoAlerta"] = "Error";
                MetodoGeneral.RegistroDeError(ex.Message, "ProyectoTramites");
                switch (IdEstatusProyecto)
                {
                case "CAPTURADO": TempData["notice"] = "El proyecto se registró en ENREL pero no ha sido sido enviado al gestor de trámites.";
                    return(RedirectToAction("Index"));

                case "ENVIADOBPM": TempData["notice"] = "El proyecto no ha sido registrado en Gobmx.";
                    return(RedirectToAction("Index"));

                case "ENVIADOGOBMX": TempData["notice"] = "El proyecto ha sido registrado en Gobmx pero ocurrió un error inesperado";
                    return(RedirectToAction("Index"));

                default: TempData["notice"] = "Error inesperado, por favor consulte a un administrador de la aplicación.";
                    return(RedirectToAction("Index"));
                }
            }
        }