/// <summary> /// Metodo que sube los archivos al ftp /// </summary> public void enviaAckCorreo() { int temporizador = 0; while (!detenerHilo) { try { //Mantiene activo la UI if (temporizador == 30000) { //Se obtiene formulario activo para mantener conexion con la DIServer Form actual = SAPbouiCOM.Framework.Application.SBO_Application.Forms.ActiveForm; //Libera el objeto de memoria GC.SuppressFinalize(actual); GC.Collect(); } ManteUdoSobreTransito manteSobreTransito = new ManteUdoSobreTransito(); List <SobreTransito> listaACKPendientes = manteSobreTransito.Consultar(SobreTransito.ETipoReceptor.Receptor); foreach (SobreTransito sobreTransito in listaACKPendientes) { //XmlDocument ACKReceptor = new XmlDocument(); XmlTextWriter writer = new XmlTextWriter(RutasCarpetas.RutaCarpetaACKSobreReceptor + sobreTransito.NombreSobre + ".xml", Encoding.UTF8); writer.Formatting = Formatting.Indented; //Empieza el documento ACKSOBRE writer.WriteStartDocument(); writer.WriteStartElement("ACKReceptor"); writer.WriteElementString("Token", sobreTransito.Token); writer.WriteElementString("IDReceptor", sobreTransito.IdReceptor); writer.WriteEndElement(); writer.WriteEndDocument(); //Envia el contenido al documento writer.Flush(); //Cierra el documento writer.Close(); tipoCorreo(sobreTransito); } } catch (Exception) { } finally { //Se incrementa el temporizador temporizador++; } //Se detiene el hilo por 12 horas = ((SxMin * SXHora) * #horas) * 1000 = ((60 * 60) * 12) * 1000 = 43200000 Thread.Sleep(43200000); } }
/// <summary> /// Metodo que obtiene descarga los archivos adjuntos de /// los correos no leido y los marca como leido de la /// bandeja de entrada de Gmail /// </summary> /// <returns></returns> public void bandejaEntradaGmail() { while (!detenerHilo) { try { //Se obtiene informacion de cuenta de correo ManteUdoCorreos manteUdo = new ManteUdoCorreos(); Correo correo = manteUdo.Consultar(); string clave = correo.Clave, usuario = correo.Cuenta; ImapClient cliente = new ImapClient(); //Se conecta con el servidor if (cliente.Connect(Mensaje.cliGmail, true)) { //Se loguea con el usuario y la clave cliente.Login(usuario, clave); //Se obtiene la carpeta de bandeja de entrada ImapX.Collections.FolderCollection folder = cliente.Folders; ImapX.Folder buzonEntrada = cliente.Folders.Inbox; //Se obtiene los mensajes no leidos ImapX.Message[] mensajes = buzonEntrada.Search("UNSEEN", ImapX.Enums.MessageFetchMode.Full); //Se recorren la lista de mensajes obtenidos foreach (ImapX.Message mensaje in mensajes) { //Se obtienen los archivos adjuntos foreach (var archivo in mensaje.Attachments) { //Se comprueba que sea un archivo xml if (ValidarXmlSobre(archivo.FileName)) { mensaje.Seen = true; //Se descargan los archivos adjuntos archivo.Download(); archivo.Save(RutasCarpetas.RutaCarpetaBandejaEntrada); string desde = mensaje.From.ToString(); //Se guarda en la tabla de sobres Recibidos respuestaSobre.GenerarXML(RutasCarpetas.RutaCarpetaBandejaEntrada, archivo.FileName, desde); } //Se comprueba que sea un ACK else if (ValidarXmlACKSobre(archivo.FileName)) { archivo.Download(); archivo.Save(RutasCarpetas.RutaCarpetaBandejaEntrada); mensaje.Seen = true; //Obtiene datos del sobre de un ACK xml SobreTransito sobreTransito = ObtenerSobreTransito(archivo.FileName, mensaje.From.ToString()); //Guarda los datos en la tabla TFEST(Sobre en transito) ManteUdoSobreTransito manteSobreTransito = new ManteUdoSobreTransito(); manteSobreTransito.Almacenar(sobreTransito); } //else if (ValidarXmlACKCFE(archivo.FileName)) //{ // archivo.Save(RutasCarpetas.RutaCarpetaAcuseRecibidoCertificado); // mensaje.Seen = true; // RespuestaCertificados respuestaCFE = new RespuestaCertificados(); // respuestaCFE.ProcesarRespuesta(archivo.FileName, CFE.ESTipoReceptor.Receptor); //} //else //{ // archivo.Save(RutasCarpetas.RutaCarpetaConsultaEstado); // mensaje.Seen = true; // RespuestaConsultaCFE respuestaConsultaCfe = new RespuestaConsultaCFE(); // SobreTransito sobreTransito = respuestaConsultaCfe.ValidarContenidoConsulta(archivo.FileName); // if (sobreTransito != null) // { // respuestaConsultaCfe.ObtenerEstadoCFE(sobreTransito.Token, sobreTransito.IdReceptor, mensaje.From.ToString(), archivo.FileName); // } //} } } //Se cierra sesion cliente.Logout(); //Se desconecta del servidor cliente.Disconnect(); //Se libera el objeto cliente.Dispose(); } } catch (Exception) { //SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("Mail/BandejaEntradaGmail/Error: " + ex.ToString()); } finally { Thread.Sleep(30000); } } }
/// <summary> /// Metodo que descarga los archivos adjuntos de los correos /// no leidos de la cuenta de outlook /// </summary> public void bandejaEntradaOutlook() { Microsoft.Office.Interop.Outlook.Application app = null; Microsoft.Office.Interop.Outlook._NameSpace ns = null; Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null; Microsoft.Office.Interop.Outlook.MailItem sinLeer; int p = 0, t = 0; while (!detenerHilo) { try { app = new Microsoft.Office.Interop.Outlook.Application(); ns = app.GetNamespace("MAPI"); ns.Logon(null, null, false, false); inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook. OlDefaultFolders.olFolderInbox); ///Se obtiene la bandeja de entrada de la cuenta de correo Microsoft.Office.Interop.Outlook.Items inboxItems = inboxFolder.Items; t = inboxFolder.UnReadItemCount; ///Se obtiene la bandeja de entrada de correos no leidos inboxItems = inboxItems.Restrict("[unread] = true"); while (p < t) { if (p == 0) { ///Se obtiene el primer elemento de la bandeja de entrada sinLeer = inboxItems.GetFirst(); } else { ///Se obtiene el elemento siguiente de la bandeja de entrada sinLeer = inboxItems.GetNext(); } ///Se obtiene los archivos adjuntos del correo Microsoft.Office.Interop.Outlook.Attachments adjuntos = sinLeer.Attachments; foreach (Microsoft.Office.Interop.Outlook.Attachment archivo in adjuntos) { if (ValidarXmlSobre(archivo.FileName)) { ///Se marca el correo como no leido sinLeer.UnRead = false; //Se descargar el archivo adjunto del correo archivo.SaveAsFile(RutasCarpetas.RutaCarpetaBandejaEntrada + archivo.FileName); string desde = sinLeer.Sender.ToString(); //Se sube el archivo al servidor FTP FTP ftp = new FTP(); ftp.CargarArchivos(archivo.FileName, RutasCarpetas.RutaCarpetaBandejaEntrada, 3); //Se guarda en la tabla de sobres Recibidos respuestaSobre.GenerarXML(RutasCarpetas.RutaCarpetaBandejaEntrada, archivo.FileName, desde); } //Se comprueba que sea un ACK else if (ValidarXmlACKSobre(archivo.FileName)) { archivo.SaveAsFile(RutasCarpetas.RutaCarpetaBandejaEntrada); sinLeer.UnRead = false; SobreTransito sobreTransito = ObtenerSobreTransito(archivo.FileName, sinLeer.Sender.ToString()); ManteUdoSobreTransito manteSobreTransito = new ManteUdoSobreTransito(); manteSobreTransito.Almacenar(sobreTransito); } } p = p + 1; } } catch (Exception) { } finally { ns = null; app = null; inboxFolder = null; Thread.Sleep(60000); } } }
/// <summary> /// Procesa la respuesta del web service de DGI /// </summary> /// <param name="xmlRespuesta"></param> /// <param name="parametros"></param> public void ProcesarRespuesta(string xmlRespuesta, object parametros) { string estadoRespuesta = "", token = "", idReceptor = ""; ParametrosJobWsDGI parametrosJob = parametros as ParametrosJobWsDGI; XmlDocument xmlDocumento = new XmlDocument(); ManteUdoSobre manteSobre = new ManteUdoSobre(); try { xmlDocumento.LoadXml(xmlRespuesta); idReceptor = xmlDocumento.GetElementsByTagName("IDReceptor").Item(0).InnerText; estadoRespuesta = xmlDocumento.GetElementsByTagName("Estado").Item(0).InnerText; if (estadoRespuesta.Equals("AS")) { token = xmlDocumento.GetElementsByTagName("Token").Item(0).InnerText; string hora = xmlDocumento.GetElementsByTagName("Fechahora").Item(0).InnerText; SobreTransito sobreTransito = new SobreTransito(); sobreTransito.NombreSobre = parametrosJob.Sobre.Nombre; sobreTransito.Token = token; sobreTransito.IdReceptor = idReceptor; sobreTransito.TipoReceptor = SobreTransito.ETipoReceptor.DGI; sobreTransito.Tipo = parametrosJob.Cfe.TipoCFEInt; sobreTransito.Serie = parametrosJob.Cfe.SerieComprobante; sobreTransito.Numero = parametrosJob.Cfe.NumeroComprobante; ManteUdoSobreTransito manteTransito = new ManteUdoSobreTransito(); manteTransito.Almacenar(sobreTransito); //True = AS, no se agrega detalle correspondiente a info de rechazo manteSobre.cargarSobreXml(xmlDocumento, parametrosJob.Sobre.Nombre, true); //Se crea el documento Pdf //CrearPDF(parametrosJob.Cfe, parametrosJob.Cae); } else if (estadoRespuesta.Equals("BS")) { //False = BS, se agrega detalle correspondiente a info de rechazo manteSobre.cargarSobreXml(xmlDocumento, parametrosJob.Sobre.Nombre, false); } } catch (Exception) { app.MessageBox("No se pudo enviar a DGI por problemas de conexión, recordar reenvio de documento."); ManteUdoControlSobres manteUdoControlSobres = new ManteUdoControlSobres(); ParametrosJobWsDGI parametrosDGI = parametros as ParametrosJobWsDGI; ControlSobres controlSobres = new ControlSobres(); controlSobres.Estado = "Pendiente"; controlSobres.Serie = parametrosDGI.Cfe.SerieComprobante; controlSobres.Numero = parametrosDGI.Cfe.NumeroComprobante.ToString(); controlSobres.Tipo = parametrosDGI.Cfe.TipoCFEInt.ToString(); controlSobres.DocumentoSap = parametrosDGI.Cfe.DocumentoSAP; controlSobres.UsuarioSap = ProcConexion.Comp.UserName; manteUdoControlSobres.Almacenar(controlSobres); //app.MessageBox("ERROR RESPUESTA: " + ex.ToString()); } finally { if (xmlDocumento != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(xmlDocumento); GC.Collect(); } if (xmlDocumento != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(xmlDocumento); GC.Collect(); } if (manteSobre != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(manteSobre); GC.Collect(); } } }
/// <summary> /// Procesa la respuesta del web service de DGI /// </summary> /// <param name="xmlRespuesta"></param> /// <param name="parametros"></param> public void ProcesarRespuesta(string xmlRespuesta, object parametros, ControlSobres controlSobres) { string estadoRespuesta = "", token = "", idReceptor = ""; ParametrosJobWsDGIMasivo parametrosJob = parametros as ParametrosJobWsDGIMasivo; ManteUdoControlSobres manteUdoControlSobres = new ManteUdoControlSobres(); ManteUdoCFE manteUdoCfe = new ManteUdoCFE(); try { XmlDocument xmlDocumento = new XmlDocument(); xmlDocumento.LoadXml(xmlRespuesta); idReceptor = xmlDocumento.GetElementsByTagName("IDReceptor").Item(0).InnerText; estadoRespuesta = xmlDocumento.GetElementsByTagName("Estado").Item(0).InnerText; if (estadoRespuesta.Equals("AS")) { manteUdoControlSobres.Eliminar(controlSobres); token = xmlDocumento.GetElementsByTagName("Token").Item(0).InnerText; string hora = xmlDocumento.GetElementsByTagName("Fechahora").Item(0).InnerText; SobreTransito sobreTransito = new SobreTransito(); sobreTransito.NombreSobre = parametrosJob.NombreSobre; sobreTransito.Token = token; sobreTransito.IdReceptor = idReceptor; sobreTransito.TipoReceptor = SobreTransito.ETipoReceptor.DGI; sobreTransito.Serie = parametrosJob.Serie; sobreTransito.Numero = parametrosJob.Numero; sobreTransito.Tipo = parametrosJob.Tipo; ManteUdoSobreTransito manteTransito = new ManteUdoSobreTransito(); manteTransito.Almacenar(sobreTransito); ManteUdoSobre manteSobre = new ManteUdoSobre(); //True = AS, no se agrega detalle correspondiente a info de rechazo manteSobre.cargarSobreXml(xmlDocumento, parametrosJob.NombreSobre, true); } else if (estadoRespuesta.Equals("BS")) { manteUdoControlSobres.Eliminar(controlSobres); ManteUdoSobre manteSobre = new ManteUdoSobre(); //False = BS, se agrega detalle correspondiente a info de rechazo manteSobre.cargarSobreXml(xmlDocumento, parametrosJob.NombreSobre, false); } } catch (Exception) { controlSobres.Estado = "Pendiente"; manteUdoControlSobres.Actualizar(controlSobres); app.MessageBox("No se pudo enviar a DGI"); } finally { if (parametrosJob != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(parametrosJob); GC.Collect(); } if (manteUdoControlSobres != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(manteUdoControlSobres); GC.Collect(); } if (manteUdoCfe != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(manteUdoCfe); GC.Collect(); } } }