public void LoadData() { try { Mouse.OverrideCursor = Cursors.Wait; Data_Documentos data_Documento = new Data_Documentos(IdDocumento); // IdDocumento variable global data_Documento.Read_Documento(); Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento); cabeceraDocumento.Read_CabeceraDocumento(); Data_Contribuyente Receptor = new Data_Contribuyente(cabeceraDocumento.IdReceptor); Receptor.Read_Contribuyente(); lblTipoDocumento.Content = data_Documento.TDDescripcion; if (!string.IsNullOrEmpty(cabeceraDocumento.FechaEmision.ToString())) { lblFechaRecepcion.Content = cabeceraDocumento.FechaEmision.ToString(); } else { lblFechaRecepcion.Content = "----/--/--"; } if (!string.IsNullOrEmpty(data_Documento.FechaEmisionSUNAT.ToString())) { lblFechaEmision.Content = data_Documento.FechaEmisionSUNAT.ToString(); } else { lblFechaEmision.Content = "----/--/--"; } lblCliente.Content = Receptor.NombreComercial; lblTotal.Content = cabeceraDocumento.ImporteTotalVenta.ToString() + " " + cabeceraDocumento.DescripcionMoneda; } catch (Exception ex) { MessageBox.Show($"Ha ocurrido un error al cargar los registros, detalle del error: {ex}", "Error al cargar los datos", MessageBoxButton.OK, MessageBoxImage.Error); var msg = string.Concat(ex.InnerException?.Message, ex.Message); Data_Log data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al enviar el documento a sunat desde la interfaz", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } finally { Mouse.OverrideCursor = null; } }
public void Post(Data_Documentos IE_IdDocumento) // Ejecución { try { string IdDocumento = IE_IdDocumento.IdDocumento; Data_Documentos data_Documento = new Data_Documentos(IdDocumento); // IdDocumento variable global data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); GenerarNotaCredito generarNotaCredito = new GenerarNotaCredito(); GenerarNotaDebito generarNotaDebito = new GenerarNotaDebito(); DocumentoElectronico documento; DocumentoResponse response; switch (data_Documento.TipoDocumento) { case "01": // Factura y boletas documento = generarFactura.Data(data_Documento); response = generarFactura.Post(documento, true); break; case "07": // Nota de crédito documento = generarNotaCredito.data(data_Documento); response = generarNotaCredito.Post(documento, true); break; case "08": // Nota de Débito documento = generarNotaDebito.data(data_Documento); response = generarNotaDebito.Post(documento, true); break; default: documento = generarFactura.Data(data_Documento); response = generarFactura.Post(documento, true); break; } if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma); //FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento) { XmlFirmado = firmadoResponse.TramaXmlFirmado }; if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el xmlFirmado del documento", Comentario = "Error con la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest //EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); EnviarDocumentoResponse enviarDocumentoResponse = enviarSunat.Post_Documento(enviarDocumentoRequest, true); if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { Data_Documentos actualizacionCDR = new Data_Documentos() { IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr }; if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el CDR del documento", Comentario = "Error con la base de datos: [dbo].[Update_Documento_CDR]", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando la recepción del CDR del documento", Comentario = "No se pudo guardar el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Aceptado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el error al no poder recibir el CDR del documento", Comentario = "No se recibió el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Rechazado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al procesar el envío del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } }
private async void btnEjecutar_ConInterfaces_Click(object sender, RoutedEventArgs e) { try { Data_Documentos data_Documento = new Data_Documentos("20186C16-C1DC-4717-8F46-407447D225BC"); data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); DocumentoElectronico documento = generarFactura.data(data_Documento); // CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO var response = await generarFactura.Post(documento); if (!response.Exito) { System.Windows.MessageBox.Show($"A ocurrido un error en la generación de XML: {response.MensajeError}"); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { File.WriteAllBytes(rutaArchivo, Convert.FromBase64String(firmadoResponse.TramaXmlFirmado)); } else { System.Windows.MessageBox.Show($"A ocurrido un error al firmar el XML: {response.MensajeError}"); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, "urlsunat"); // Obtenemos los datos para EnviarDocumentoRequest EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); // enviarDocumentoResponse = jsonEnvioDocumento ; respuestaComunConArchivo = respuestaEnvio System.Windows.MessageBox.Show(enviarDocumentoResponse.MensajeRespuesta); // Temporal para pruebas if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}")) { Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}"); } File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\{enviarDocumentoResponse.NombreArchivo}.xml", Convert.FromBase64String(firmadoResponse.TramaXmlFirmado)); if (!Directory.Exists($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR")) { Directory.CreateDirectory($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR"); } File.WriteAllBytes($"{data_Documento.Ruta}\\{enviarDocumentoResponse.NombreArchivo}\\CDR\\R-{enviarDocumentoResponse.NombreArchivo}.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr)); } } catch (Exception ex) { System.Windows.MessageBox.Show($"A ocurrido un error: {ex}"); } }
private async void btnEnviar_Click(object sender, RoutedEventArgs e) { try { int cantidadAceptados = 0; List <Data_Documentos> selected_data_Documentos = new List <Data_Documentos>(); foreach (var data_Documento in data_Documentos) { if (data_Documento.Selectable == true) { selected_data_Documentos.Add(data_Documento); } } foreach (var selected_data_Documento in selected_data_Documentos) { if (selected_data_Documento.EnviadoSunat == true) { cantidadAceptados++; } } if (selected_data_Documentos.Count() > 0) { string enviados = string.Empty; string noEnviados = string.Empty; string mensajeFinal = string.Empty; if (cantidadAceptados == 0) { ProgressDialogResult result = ProgressWindow.Execute(padre, "Procesando...", () => { ProcesarEnvio procesarEnvio = new ProcesarEnvio(data_Usuario); IEnumerable <Data_Documentos> documentosProcesar = selected_data_Documentos.AsEnumerable(); Parallel.ForEach(documentosProcesar, (data_Documento) => procesarEnvio.Post(data_Documento)); }); List <Data_Documentos> selected_data_Documentos_updated = new List <Data_Documentos>(); Data_Documentos documentoUpdated; foreach (var data_Documento in data_Documentos) { if (data_Documento.Selectable == true) { documentoUpdated = new Data_Documentos(data_Documento.IdDocumento); documentoUpdated.Read_Documento(); selected_data_Documentos_updated.Add(documentoUpdated); } } foreach (var selected_data_Documento in selected_data_Documentos_updated) { if (selected_data_Documento.EnviadoSunat == true) { enviados += $", {selected_data_Documento.SerieCorrelativo}"; } else { noEnviados += $", {selected_data_Documento.SerieCorrelativo}"; } } if (string.IsNullOrEmpty(enviados)) // Ningún enviado, puros rechazados como voz { mensajeFinal = $"No se pudo enviar ningún documento, los documentos rechazados son:\n {noEnviados}"; } if (!string.IsNullOrEmpty(enviados) && string.IsNullOrEmpty(noEnviados)) // Sin ningún documento rechazado { mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados}"; } if (!string.IsNullOrEmpty(enviados) && !string.IsNullOrEmpty(noEnviados)) // Con al menos un documento rechazado { mensajeFinal = $"Se ha enviado a Sunat el(los) documento(s):\n {enviados} y se han rechazado los siguientes documentos:\n {noEnviados}"; } LoadGrid(); CustomDialogWindow customDialogWindow = new CustomDialogWindow(); customDialogWindow.Buttons = CustomDialogButtons.OK; customDialogWindow.Caption = "Mensaje"; customDialogWindow.DefaultButton = CustomDialogResults.OK; customDialogWindow.InstructionHeading = "Resultados del envío a Sunat"; customDialogWindow.InstructionIcon = CustomDialogIcons.Information; customDialogWindow.InstructionText = mensajeFinal; CustomDialogResults customDialogResults = customDialogWindow.Show(); } else { System.Windows.Forms.MessageBox.Show("Estimado usuario, está intentando enviar a Sunat uno o varios documentos que ya fueron aceptados, " + "sí desea revisar estos documento(s) selecciónelo y pulse descargar.", "Acción no permitida", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { System.Windows.Forms.MessageBox.Show("Debe seleccionar al menos un documento", "Ninguna selección detectada", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); System.Windows.MessageBox.Show(msg, "Error al enviar el documento a sunat", MessageBoxButton.OK, MessageBoxImage.Error); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al enviar el documento a sunat desde la interfaz", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } }
public async void Post(Data_Documentos IE_IdDocumento) { //var task = Task.Factory.StartNew(async () => //{ try { string IdDocumento = IE_IdDocumento.IdDocumento; // var taskfactory etc etc pero para despues "20186C16-C1DC-4717-8F46-407447D225BC" Data_Documentos data_Documento = new Data_Documentos(IdDocumento); // IdDocumento variable global data_Documento.Read_Documento(); GenerarFactura generarFactura = new GenerarFactura(); DocumentoElectronico documento = generarFactura.data(data_Documento); // CAMBIAR A ASINCRONO AL FINALIZAR EL DESARROLLO\ var response = await generarFactura.Post(documento); //await if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con serie correlativo: {documento.SerieCorrelativo} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } string rutaArchivo = Path.Combine(data_Documento.Ruta, $"{documento.SerieCorrelativo}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Documento.IdEmisor, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = await firmar.Post(firmadoRequest); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { Data_Documentos actualizacionXML = new Data_Documentos(IdDocumento) { XmlFirmado = firmadoResponse.TramaXmlFirmado }; if (!actualizacionXML.Update_Documento_OneColumn("[dbo].[Update_Documento_SignedXML]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el xmlFirmado del documento", Comentario = "Error con la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = "Error al firmar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documento, GetURL(data_Documento.TipoDocumento)); // Obtenemos los datos para EnviarDocumentoRequest EnviarDocumentoResponse enviarDocumentoResponse = await enviarSunat.Post_Documento(enviarDocumentoRequest); if (enviarDocumentoResponse.Exito && !string.IsNullOrEmpty(enviarDocumentoResponse.TramaZipCdr)) // Comprobar envío a sunat { Data_Documentos actualizacionCDR = new Data_Documentos() { IdDocumento = IdDocumento, CdrSunat = enviarDocumentoResponse.TramaZipCdr }; if (!actualizacionCDR.Update_Documento_OneColumn("[dbo].[Update_Documento_CDR]")) { data_Log = new Data_Log() { DetalleError = "Error al actualizar el CDR del documento", Comentario = "Error con la base de datos: [dbo].[Update_Documento_CDR]", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeRespuesta }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando la recepción del CDR del documento", Comentario = "No se pudo guardar el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Aceptado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } else { data_Log = new Data_Log() { DetalleError = enviarDocumentoResponse.MensajeError, Comentario = "Error al enviar el documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); Data_Documentos actualizacionComentario = new Data_Documentos() { IdDocumento = IdDocumento, ComentarioDocumento = enviarDocumentoResponse.MensajeError }; if (!actualizacionComentario.Update_Documento_OneColumn("[dbo].[Update_Documento_Comentario]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el error al no poder recibir el CDR del documento", Comentario = "No se recibió el CDR", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_Documentos actualizacionEstadoSunat = new Data_Documentos() { IdDocumento = IdDocumento, EstadoSunat = "Rechazado" }; if (!actualizacionEstadoSunat.Update_Documento_OneColumn("[dbo].[Update_Documento_EstadoSunat]")) { data_Log = new Data_Log() { DetalleError = "Error al guardar el comentario notificando el estado del documento", Comentario = "No se pudo guardar el estado del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } catch (Exception ex) { var msg = string.Concat(ex.InnerException?.Message, ex.Message); data_Log = new Data_Log() { DetalleError = $"Detalle del error: {msg}", Comentario = "Error al procesar el envío del documento", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } //}); //return task; }