public void ActualizarFirmaElectronica(ControlSobres control) { Recordset recSet = null; string consulta = ""; try { //Obtener objeto de recordset recSet = ProcConexion.Comp.GetBusinessObject(BoObjectTypes.BoRecordset); //Establecer consulta consulta = "Update [@TFECFE] set U_FechaFirma = GETDATE() where U_TipoDoc = '" + control.Tipo + "' AND U_Serie ='" + control.Serie + "' AND U_NumCFE = '" + control.Numero + "'"; //Ejectura consulta recSet.DoQuery(consulta); } catch (Exception) { } finally { if (recSet != null) { //Se libera el objeto de memoria System.Runtime.InteropServices.Marshal.ReleaseComObject(recSet); System.GC.Collect(); } } }
/// <summary> /// Inicia el proceso de /// </summary> /// <param name="parametros"></param> public void Trabajar(object parametros) { ControlSobres controlSobre = new ControlSobres(); try { string respuesta = Consumir(parametros, out controlSobre, SuperUsuario()); if (!respuesta.Equals("")) { ProcesarRespuesta(respuesta, parametros, controlSobre); } } catch (Exception) { } finally { if (controlSobre != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(controlSobre); GC.Collect(); } } }
/// <summary> /// Actualiza el estado de los sobres /// </summary> /// <param name="control"></param> /// <returns></returns> public bool Actualizar(ControlSobres control) { bool resultado = false; GeneralService servicioGeneral = null; GeneralData dataGeneral = null; GeneralDataParams parametros = null; try { //Obtener servicio general de la compañia servicioGeneral = ProcConexion.Comp.GetCompanyService().GetGeneralService("TTFECONSOB"); //Obtener lista de parametros parametros = servicioGeneral.GetDataInterface(GeneralServiceDataInterfaces.gsGeneralDataParams); //Establecer parametros parametros.SetProperty("DocEntry", control.DocEntry); //Apuntar al udo que corresponde con los parametros dataGeneral = servicioGeneral.GetByParams(parametros); dataGeneral.SetProperty("U_Estado", control.Estado); //Agregar el nuevo registro a la base de datos mediante el servicio general servicioGeneral.Update(dataGeneral); resultado = true; } catch (Exception ex) { SAPbouiCOM.Framework.Application.SBO_Application.MessageBox(ex.ToString()); } finally { if (parametros != null) { //Liberar memoria utlizada por el objeto parametros System.Runtime.InteropServices.Marshal.ReleaseComObject(parametros); System.GC.Collect(); } if (dataGeneral != null) { //Liberar memoria utlizada por el objeto dataGeneral System.Runtime.InteropServices.Marshal.ReleaseComObject(dataGeneral); System.GC.Collect(); } if (servicioGeneral != null) { //Liberar memoria utlizada por el objeto servicioGeneral System.Runtime.InteropServices.Marshal.ReleaseComObject(servicioGeneral); System.GC.Collect(); } } return(resultado); }
/// <summary> /// Obtiene le docEntry de un sobre /// </summary> /// <param name="control"></param> /// <returns></returns> public ControlSobres ObtenerDocEntry(ControlSobres control) { Recordset recSet = null; string consulta = ""; try { //Obtener objeto de recordset recSet = ProcConexion.Comp.GetBusinessObject(BoObjectTypes.BoRecordset); JobEnvioSobreMasivo Usuario = new JobEnvioSobreMasivo(); //Establecer consulta if (Usuario.SuperUsuario()) { consulta = "SELECT DocEntry FROM [@TFECONSOB] WHERE U_Tipo = '" + control.Tipo + "' AND U_Serie ='" + control.Serie + "' AND U_Numero = '" + control.Numero + "'"; } else { consulta = "SELECT DocEntry FROM [@TFECONSOB] WHERE U_Tipo = '" + control.Tipo + "' AND U_Serie ='" + control.Serie + "' AND U_Numero = '" + control.Numero + "' AND U_Usuario = '" + control.UsuarioSap + "'"; } //Ejectura consulta recSet.DoQuery(consulta); //Posicionar cursor al inicio recSet.MoveFirst(); //Validar que existan valores if (recSet.RecordCount > 0) { control.DocEntry = recSet.Fields.Item("DocEntry").Value + ""; } } catch (Exception) { } finally { if (recSet != null) { //Se libera el objeto de memoria System.Runtime.InteropServices.Marshal.ReleaseComObject(recSet); System.GC.Collect(); } } return(control); }
/// <summary> /// Almacena los sobres /// </summary> /// <param name="controlSobres"></param> /// <returns></returns> public bool Almacenar(ControlSobres controlSobres) { bool resultado = false; GeneralService servicioGeneral = null; GeneralData dataGeneral = null; try { //Obtener el servicio de la compañia servicioGeneral = ProcConexion.Comp.GetCompanyService().GetGeneralService("TTFECONSOB"); //Apuntar a la cabecera del UDO dataGeneral = servicioGeneral.GetDataInterface(GeneralServiceDataInterfaces.gsGeneralData); //Asiganar valor a cada una de la propiedades del udo dataGeneral.SetProperty("U_Tipo", controlSobres.Tipo); dataGeneral.SetProperty("U_Serie", controlSobres.Serie); dataGeneral.SetProperty("U_Numero", controlSobres.Numero); dataGeneral.SetProperty("U_Estado", controlSobres.Estado); dataGeneral.SetProperty("U_Usuario", controlSobres.UsuarioSap); dataGeneral.SetProperty("U_DocSap", controlSobres.DocumentoSap); //Agregar el nuevo registro a la base de datos mediante el servicio general servicioGeneral.Add(dataGeneral); resultado = true; } catch (Exception ex) { SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("ERROR: Almacenar Envio DGI/ " + ex.ToString()); } finally { if (dataGeneral != null) { //Liberar memoria utlizada por dataGeneral System.Runtime.InteropServices.Marshal.ReleaseComObject(dataGeneral); System.GC.Collect(); } if (servicioGeneral != null) { //Liberar memoria utlizada por servicioGeneral System.Runtime.InteropServices.Marshal.ReleaseComObject(servicioGeneral); System.GC.Collect(); } } return(resultado); }
/// <summary> /// Inicia el proceso de /// </summary> /// <param name="parametros"></param> public void Trabajar(object parametros) { string respuesta = Consumir(parametros); if (!respuesta.Equals("")) { ProcesarRespuesta(respuesta, parametros); } else { 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); } }
/// <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(); } } }
/// <summary> /// Consume el web service /// </summary> /// <param name="parametros"></param> /// <returns></returns> public string Consumir(object parametros, out ControlSobres controlSobres, Boolean SuperUser) { string respuesta = ""; WebServiceDGIMasivo webServiceDgi = new WebServiceDGIMasivo(parametros); ParametrosJobWsDGIMasivo parametrosJobWsDGIMasivo = parametros as ParametrosJobWsDGIMasivo; XmlDocument xmlDocumento = new XmlDocument(); ManteUdoControlSobres manteUdoControlSobres = new ManteUdoControlSobres(); controlSobres = new ControlSobres(); try { if (SuperUser) { FTP ftp = new FTP(); if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaSobresDgi, 0)) { } else if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaContingenciaSobresDgi, 5)) { } } if (File.Exists((RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"))) { xmlDocumento.Load(RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"); } else if (File.Exists((RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"))) { xmlDocumento.Load(RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml"); } controlSobres.Tipo = parametrosJobWsDGIMasivo.Tipo + ""; controlSobres.Serie = parametrosJobWsDGIMasivo.Serie; controlSobres.Numero = parametrosJobWsDGIMasivo.Numero + ""; controlSobres.Estado = "Enviado"; controlSobres.UsuarioSap = ProcConexion.Comp.UserName; controlSobres = manteUdoControlSobres.ObtenerDocEntry(controlSobres); manteUdoControlSobres.Actualizar(controlSobres); manteUdoControlSobres.ActualizarFirmaElectronica(controlSobres); // RE firmo el documento con la fecha del Envio FirmaDigital firma = new FirmaDigital(); xmlDocumento = firma.refirmarDocumentos(xmlDocumento); // Envio el documento re firmado. respuesta = webServiceDgi.WSDGI.SendWSDGI(xmlDocumento.InnerXml, clsWSDGI.WsMethod.Envelope); if (!respuesta.Equals("")) { respuesta = respuesta.Replace("<IDEmisor>0</IDEmisor>", "<IDEmisor>" + xmlDocumento.GetElementsByTagName("DGICFE:Idemisor").Item(0).InnerText + "</IDEmisor>"); //manteUdoControlSobres.Eliminar(controlSobres); } } catch (Exception) { if (controlSobres.Tipo != "" && controlSobres.Numero != "0" && controlSobres.Serie != "") { controlSobres.Estado = "Pendiente"; } else { controlSobres.Estado = "NoAplica"; } manteUdoControlSobres.Actualizar(controlSobres); respuesta = ""; } finally { if (webServiceDgi != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(webServiceDgi); GC.Collect(); } if (parametrosJobWsDGIMasivo != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(parametrosJobWsDGIMasivo); GC.Collect(); } if (xmlDocumento != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(xmlDocumento); GC.Collect(); } if (manteUdoControlSobres != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(manteUdoControlSobres); GC.Collect(); } if (controlSobres != null) { //Libera de memoria el objeto factura GC.SuppressFinalize(controlSobres); GC.Collect(); } } return(respuesta); }