public List <En_Archivo> ObtenerRespuestaPendiente() { List <En_Archivo> listaArchivo = new List <En_Archivo>(); List <SqlParameter> parameters = new List <SqlParameter>(); //parameters.Add(new SqlParameter { ParameterName = "@Serie", SqlDbType = SqlDbType.VarChar, Size = 6, Value = serie }); //parameters.Add(new SqlParameter { ParameterName = "@Numero", SqlDbType = SqlDbType.VarChar, Size = 20, Value = numero }); //parameters.Add(new SqlParameter { ParameterName = "@TipoComprobante", SqlDbType = SqlDbType.VarChar, Size = 50, Value = tipo_comprobante }); //parameters.Add(new SqlParameter { ParameterName = "@Ruc", SqlDbType = SqlDbType.VarChar, Size = 15, Value = ruc }); SqlCommand cmd = new SqlCommand(); try { SqlDataReader dr = SqlHelper.ExecuteReader("usp_ListaCDRPendiente", parameters); // SqlDataReader dr = SqlHelper.ExecuteReader("usp_ListaCDRPendiente", cmd); while (dr.Read()) { En_Archivo Archivo = new En_Archivo(); Archivo.Archivo = (byte[])(dr[1]); Archivo.IdComprobante = (long)dr[0]; Archivo.FechaRegistro = (DateTime)dr[2]; listaArchivo.Add(Archivo); } } catch (Exception ex) { // log.Error(ex.Message, ex); throw new Exception(ex.Message); } return(listaArchivo); }
public void ProcesarRepresentacionImpresa() { try { Ad_Comprobante adComprobante = new Ad_Comprobante(); List <En_Archivo> listaComprobante = adComprobante.ComprobantesPendientesGenerarPdf(); if (listaComprobante.Count > 0) { Task[] taskArray = new Task[listaComprobante.Count]; int i = 0; foreach (En_Archivo comprobante in listaComprobante) { En_Archivo comprobanteParam = comprobante; taskArray[i] = Task.Factory.StartNew(() => GenerarPdf(comprobanteParam)); i += 1; } Task.WaitAll(taskArray.ToArray()); } } catch (Exception ex) { log.Error(ex.Message.ToString(), ex); } }
public void EnviarComprobante(En_Comprobante comprobante) { long idComprobante = comprobante.IdComprobante; Ad_Archivo adArchivo = new Ad_Archivo(); Ad_Comprobante adComprobante = new Ad_Comprobante(); En_Archivo archivo = adArchivo.ObtenerArchivoComprobante(idComprobante); string nombre = archivo.Nombre; byte[] contenido = archivo.Contenido; string carpetaTemporal = adArchivo.ObtenerRutaTemporal("TempENVIO"); string carpetaArchivo = Path.GetFileNameWithoutExtension(nombre); string rutaCarpetaXML = Path.Combine(carpetaTemporal, carpetaArchivo); string rutaArchivoXML = Path.Combine(rutaCarpetaXML, nombre); string rutaArchivoZIP = string.Concat(rutaCarpetaXML, ".zip"); string nombreArchivoZIP = Path.GetFileName(rutaArchivoZIP); string nombreArchivoZipResponse = string.Concat("R-", nombreArchivoZIP); string rutaZipResponse = Path.Combine(carpetaTemporal, nombreArchivoZipResponse); CrearCarpeta(rutaCarpetaXML); CrearArchivo(rutaArchivoXML, contenido); Comprimir(rutaArchivoZIP, rutaCarpetaXML); EliminarCarpeta(rutaCarpetaXML); ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true; byte[] archivoZip = File.ReadAllBytes(rutaArchivoZIP); wsSUNAT.sendBillRequest sendBill = new wsSUNAT.sendBillRequest(); wsSUNAT.billServiceClient billService = new wsSUNAT.billServiceClient(); try { billService.Open(); byte[] archivoResponse = billService.sendBill(nombreArchivoZIP, archivoZip, ""); adComprobante.InsertarCdrPendiente(idComprobante, archivoResponse); billService.Close(); log.Info(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} se procesó correctamente.", comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor)); } catch (FaultException ex) { if (billService.State == CommunicationState.Opened) { billService.Close(); } string codigo = ex.Code.Name.ToLower().Replace("client.", ""); string mensaje = ex.Message.ToString(); int reintento = adComprobante.QuitarPendienteEnvio(idComprobante, codigo); string mensajeReintento = (reintento == 1) ? "Se dejará de reintentar el envío de éste comprobante." : ""; log.Error(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} obtuvo el código de error \"{3}\" con mensaje \"{4}\". {5}", comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor, codigo, mensaje, mensajeReintento)); } EliminarArchivo(rutaZipResponse); EliminarArchivo(rutaArchivoZIP); }
public En_Archivo ObtenerArchivoComprobante(long idComprobante) { En_Archivo archivo = null; SqlConnection cn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("dbo.usp_ObtenerPDFyXMLporComprobante", cn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter { ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = idComprobante }); try { cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { archivo = new En_Archivo { IdComprobante = (long)dr[0], TipoComprobante = (string)dr[1], SerieNumero = (string)dr[2], NombreXML = (string)dr[3], ArchivoXML = (byte[])dr[4], NombrePDF = (string)dr[5], ArchivoPDF = (byte[])dr[6], FechaEmision = (string)dr[7], RazonSocial = (string)dr[8] }; } cn.Close(); return(archivo); } catch (SqlException ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } catch (Exception ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } }
public void InsertarRepresentacionImpresa(En_Archivo archivo) { try { Ad_Comprobante adComprobante = new Ad_Comprobante(); adComprobante.InsertarRepresentacionImpresa(archivo); } catch (Exception ex) { log.Error(archivo.NombreXML + " " + ex.Message.ToString(), ex); } }
public List <En_Archivo> ComprobantesPendientesGenerarPdf() { List <En_Archivo> listaComprobantes = new List <En_Archivo>(); SqlConnection cn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("sp_RepresentacionImpresaPendiente", cn) { CommandType = CommandType.StoredProcedure }; try { cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { En_Archivo archivo = new En_Archivo(); archivo.IdComprobante = (long)(dr[0]); archivo.TipoComprobante = (string)dr[1]; archivo.ArchivoXML = (byte[])dr[2]; archivo.NombreXML = (string)dr[3]; archivo.Qr = (string)dr[4]; //archivo.Ruta = (string)dr[5]; archivo.TextoDetraccion = (string)dr[6]; listaComprobantes.Add(archivo); } cn.Close(); return(listaComprobantes); } catch (SqlException ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } catch (Exception ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } }
public En_Archivo ObtenerArchivoComprobante(long idComprobante) { En_Archivo archivo = null; SqlConnection cn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("dbo.usp_ObtenerArchivoComprobante", cn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter { ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = idComprobante }); try { cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { archivo = new En_Archivo(); archivo.IdComprobante = (long)dr[0]; archivo.Nombre = (string)(dr[1]); archivo.Contenido = (byte[])dr[2]; } cn.Close(); return(archivo); } catch (SqlException ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } catch (Exception ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } }
public void GenerarPdf(En_Archivo comprobante) { string archivoXML = comprobante.Ruta + @"\" + comprobante.NombreXML; if (!Directory.Exists(comprobante.Ruta)) { Directory.CreateDirectory(comprobante.Ruta); } try { if (!File.Exists(archivoXML)) { File.WriteAllBytes(archivoXML, comprobante.ArchivoXML); } } catch (Exception ex) { log.Error(String.Format("{0} Error : ", comprobante.NombreXML, ex.Message.ToString())); return; } if (comprobante.TipoComprobante == "01" || comprobante.TipoComprobante == "03") { Ne_Invoice oInvoice = new Ne_Invoice(); oInvoice.GenerarInvoice(comprobante); } if (comprobante.TipoComprobante == "07") { Ne_CreditNote oInvoice = new Ne_CreditNote(); oInvoice.GenerarCreditNote(comprobante); } if (comprobante.TipoComprobante == "08") { Ne_DebitNote oInvoice = new Ne_DebitNote(); oInvoice.GenerarDebitNote(comprobante); } //EliminarArchivo(rutaZipResponse); //EliminarArchivo(rutaArchivoZIP); }
public void InsertarRepresentacionImpresa(En_Archivo archivo) { SqlConnection cn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("sp_RepresentacionImpresaInsert", cn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter { ParameterName = "@IdComprobante", SqlDbType = SqlDbType.BigInt, Value = archivo.IdComprobante }); cmd.Parameters.Add(new SqlParameter { ParameterName = "@NombreRepresentacionImpresa", SqlDbType = SqlDbType.VarChar, Value = archivo.NombrePdf }); cmd.Parameters.Add(new SqlParameter { ParameterName = "@Archivo", SqlDbType = SqlDbType.VarBinary, Value = archivo.ArchivoPdf }); try { cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); } catch (SqlException ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } catch (Exception ex) { if (cn.State == ConnectionState.Open) { cn.Close(); } throw ex; } }
private void EnviarCorreo(string carpetaTemporal, En_Correo correo) { MailMessage message = new MailMessage(); SmtpClient smtp = new SmtpClient(); En_Correo enCorreo = null; Da_Correo daCorreo = new Da_Correo(); try { Da_Archivo daArchivo = new Da_Archivo(); En_Archivo archivo = daArchivo.ObtenerArchivoComprobante(correo.IdComprobante); string rutaXML = Path.Combine(carpetaTemporal, archivo.NombreXML); string rutaPDF = Path.Combine(carpetaTemporal, archivo.NombrePDF); string correoEmisor = ConfigurationManager.AppSettings["correoEmisor"]; int puerto = int.Parse(ConfigurationManager.AppSettings["puerto"]); string host = ConfigurationManager.AppSettings["host"]; string usuario = ConfigurationManager.AppSettings["usuario"]; string clave = ConfigurationManager.AppSettings["clave"]; string tipoComprobante = ""; switch (archivo.TipoComprobante) { case "01": tipoComprobante = "Factura"; break; case "03": tipoComprobante = "Boleta"; break; case "07": tipoComprobante = "Nota de crédito"; break; case "08": tipoComprobante = "Nota de débito"; break; } string rutaPlantilla = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PlantillaCorreo.txt"); string cuerpoCorreo = File.ReadAllText(rutaPlantilla); cuerpoCorreo = string.Format(cuerpoCorreo, archivo.RazonSocial.ToUpper(), tipoComprobante, archivo.SerieNumero, archivo.FechaEmision); CrearArchivo(rutaXML, archivo.ArchivoXML); CrearArchivo(rutaPDF, archivo.ArchivoPDF); message.From = new MailAddress(correoEmisor); message.To.Add(new MailAddress(correo.Para)); message.Subject = correo.Asunto; message.IsBodyHtml = true; message.Body = cuerpoCorreo; message.Attachments.Add(new Attachment(rutaXML)); message.Attachments.Add(new Attachment(rutaPDF)); smtp.Port = puerto; smtp.Host = host; smtp.EnableSsl = true; smtp.UseDefaultCredentials = false; smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Credentials = new NetworkCredential(usuario, clave); try { smtp.Send(message); message.Dispose(); smtp.Dispose(); enCorreo = new En_Correo() { IdComprobante = correo.IdComprobante, Estado = 2, MensajeProceso = "Correo enviado satisfactoriamente." }; daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo); log.InfoFormat("Se envió el correo para el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero); } catch (Exception ex) { message.Dispose(); smtp.Dispose(); enCorreo = new En_Correo() { IdComprobante = correo.IdComprobante, Estado = 3, MensajeProceso = "Ocurrió un error en el envío. Detalle: " + ex.Message.ToString() }; daCorreo.ActualizarEstadoComprobanteCorreo(enCorreo); log.InfoFormat("Ocurrió un error al enviar el comprobante {0}-{1}.", archivo.TipoComprobante, archivo.SerieNumero); throw; } EliminarArchivo(rutaXML); EliminarArchivo(rutaPDF); } catch (Exception ex) { string mensajeError = ex.Message.ToString(); log.Error(mensajeError, ex); } }
public void GenerarDebitNote(En_Archivo archivo) { DebitNoteType ocomprobante; string rutaXml = archivo.Ruta + @"\" + archivo.NombreXML; string rutaPdf = archivo.Ruta + @"\" + archivo.NombreXML.Replace("xml", "pdf"); string nombrePdf = archivo.NombreXML.Replace("xml", "pdf"); XmlSerializer oserial = new XmlSerializer(typeof(DebitNoteType)); using (StreamReader reader = new StreamReader(rutaXml)) { ocomprobante = (DebitNoteType)oserial.Deserialize(reader); } DataSet general = new DataSet(); //Para la cabecera DataTable TablaCabecera = FnTablaCabeceraDebitNote(ocomprobante, archivo); TablaCabecera.TableName = "Comprobante"; general.Tables.Add(TablaCabecera); //Emisor DataTable TablaEmisor = FnTablaEmisor(ocomprobante); TablaEmisor.TableName = "Emisor"; general.Tables.Add(TablaEmisor); //Receptor DataTable TablaReceptor = FnTablaReceptor(ocomprobante); TablaReceptor.TableName = "receptor"; general.Tables.Add(TablaReceptor); //Detalle DataTable TablaDetalle = FnTablaDetalle(ocomprobante); TablaDetalle.TableName = "Detalle"; general.Tables.Add(TablaDetalle); DataTable tablaSustento = FnTablaReferenciadoDebitNote(ocomprobante); string DocumentoReferenciado = ""; string sustento = ""; string TipoComprobanteReferenciado = ""; if (tablaSustento.Rows.Count > 0) { DocumentoReferenciado = tablaSustento.Rows[0]["DocumentoReferenciado"].ToString(); TipoComprobanteReferenciado = tablaSustento.Rows[0]["TipoDocumentoReferenciado"].ToString(); sustento = tablaSustento.Rows[0]["Sustento"].ToString(); } ReportDocument rpt = new ReportDocument(); try { //String rutaReporte = @"C:\Facturacion\CrpInvoice.rpt"; String rutaReporte = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"CrpNote.rpt"; //System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\CrpInvoice.rpt"; log.Info(rutaReporte); rpt.Load(rutaReporte); rpt.SetDataSource(general); rpt.SetParameterValue("DocumentoReferenciado", DocumentoReferenciado.ToString()); rpt.SetParameterValue("TipoDocumentoReferenciado", TipoComprobanteReferenciado.ToString()); rpt.SetParameterValue("Sustento", sustento.ToString()); string textoDetraccion = string.Format("Detracciones: {0}", archivo.TextoDetraccion); if (string.IsNullOrEmpty(archivo.TextoDetraccion)) { textoDetraccion = " "; } rpt.SetParameterValue("Detraccion", textoDetraccion); rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPdf); if (File.Exists(rutaPdf)) { byte[] archivoPdf = File.ReadAllBytes(rutaPdf); archivo.ArchivoPdf = archivoPdf; archivo.NombrePdf = nombrePdf; Ne_Comprobante oComprobante = new Ne_Comprobante(); oComprobante.InsertarRepresentacionImpresa(archivo); log.Info(archivo.NombrePdf + " se genero correctamente la representacion impresa"); } } catch (Exception ex) { log.Error(archivo.NombreXML + " Error " + ex.Message); } }
private DataTable FnTablaCabeceraDebitNote(DebitNoteType ocomprobante, En_Archivo archivo) { DataTable dtCabecera = new DataTable(); dtCabecera.Columns.Add(new DataColumn("SerieNumero", typeof(string))); dtCabecera.Columns.Add(new DataColumn("FechaEmision", typeof(string))); dtCabecera.Columns.Add(new DataColumn("FechaVencimiento", typeof(string))); dtCabecera.Columns.Add(new DataColumn("TipoComprobante", typeof(string))); dtCabecera.Columns.Add(new DataColumn("Moneda", typeof(string))); dtCabecera.Columns.Add(new DataColumn("MontoLetras", typeof(string))); dtCabecera.Columns.Add(new DataColumn("QR", typeof(Byte[]))); dtCabecera.Columns.Add(new DataColumn("TotalValorVentaGravada", typeof(string))); dtCabecera.Columns.Add(new DataColumn("IGV", typeof(string))); dtCabecera.Columns.Add(new DataColumn("ImporteTotal", typeof(string))); DataRow fila; fila = dtCabecera.NewRow(); fila["SerieNumero"] = FnValidarNulo(ocomprobante.ID.Value.ToString()); fila["FechaEmision"] = FnValidarNulo(ocomprobante.IssueDate.Value.ToString()); fila["FechaVencimiento"] = ""; fila["TipoComprobante"] = "NOTA CREDITO ELECTRÓNICA"; if (ocomprobante.DocumentCurrencyCode.Value.ToString() == "PEN") { fila["Moneda"] = "NUEVO SOL"; } if (ocomprobante.DocumentCurrencyCode.Value.ToString() == "USD") { fila["Moneda"] = "DOLAR AMERICANO"; } fila["MontoLetras"] = ""; if (ocomprobante.Note != null) { if (ocomprobante.Note.Length > 0) { foreach (NoteType nota in ocomprobante.Note) { if (nota.languageLocaleID == "1000") { fila["MontoLetras"] = nota.Value.ToString(); } } } } fila["QR"] = FnCodigoQR(archivo.Qr); if (ocomprobante.TaxTotal != null) { foreach (TaxTotalType total in ocomprobante.TaxTotal) { foreach (TaxSubtotalType subTotal in total.TaxSubtotal) { if (subTotal.TaxCategory.TaxScheme.Name.Value.ToString() == "IGV") { fila["IGV"] = FnValidarNulo(subTotal.TaxAmount.Value.ToString()); } } } } if (ocomprobante.RequestedMonetaryTotal != null) { fila["TotalValorVentaGravada"] = FnValidarNulo(ocomprobante.RequestedMonetaryTotal.LineExtensionAmount.Value.ToString()); fila["ImporteTotal"] = FnValidarNulo(ocomprobante.RequestedMonetaryTotal.PayableAmount.Value.ToString()); } dtCabecera.Rows.Add(fila); return(dtCabecera); }
public void GenerarInvoice(En_Archivo archivo) { InvoiceType ocomprobante; string rutaXml = archivo.Ruta + @"\" + archivo.NombreXML; string rutaPdf = archivo.Ruta + @"\" + archivo.NombreXML.Replace("xml", "pdf"); string nombrePdf = archivo.NombreXML.Replace("xml", "pdf"); XmlSerializer oserial = new XmlSerializer(typeof(InvoiceType)); using (StreamReader reader = new StreamReader(rutaXml)) { ocomprobante = (InvoiceType)oserial.Deserialize(reader); } DataSet general = new DataSet(); //Para la cabecera DataTable TablaCabecera = FnTablaCabeceraInvoice(ocomprobante, archivo); TablaCabecera.TableName = "Comprobante"; general.Tables.Add(TablaCabecera); //Emisor DataTable TablaEmisor = FnTablaEmisor(ocomprobante); TablaEmisor.TableName = "Emisor"; general.Tables.Add(TablaEmisor); //Receptor DataTable TablaReceptor = FnTablaReceptor(ocomprobante); TablaReceptor.TableName = "receptor"; general.Tables.Add(TablaReceptor); //Detalle DataTable TablaDetalle = FnTablaDetalle(ocomprobante); TablaDetalle.TableName = "Detalle"; general.Tables.Add(TablaDetalle); ReportDocument rpt = new ReportDocument(); try { //String rutaReporte = @"C:\Facturacion\CrpInvoice.rpt"; String rutaReporte = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"CrpInvoice.rpt"; //System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + @"\CrpInvoice.rpt"; log.Info(rutaReporte); rpt.Load(rutaReporte); rpt.SetDataSource(general); rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPdf); if (File.Exists(rutaPdf)) { byte[] archivoPdf = File.ReadAllBytes(rutaPdf); archivo.ArchivoPdf = archivoPdf; archivo.NombrePdf = nombrePdf; Ne_Comprobante oComprobante = new Ne_Comprobante(); oComprobante.InsertarRepresentacionImpresa(archivo); log.Info(archivo.NombrePdf + " se genero correctamente la representacion impresa"); } } catch (Exception ex) { log.Error(archivo.NombreXML + " Error " + ex.Message); } }