private void chkCell_Unchecked(object sender, RoutedEventArgs e) { CheckBox checkBox = (CheckBox)e.OriginalSource; DataGridRow dataGridRow = VisualTreeHelpers.FindAncestor <DataGridRow>(checkBox); Data_Documentos data_Documentos = (Data_Documentos)dataGridRow.DataContext; data_Documentos.Selectable = false; }
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 Factura_Sunat(Window parent, Data_Usuario usuario) { InitializeComponent(); padre = parent; Data_Documentos documentos = new Data_Documentos(); _Documentos = (IData_Documentos)documentos; data_Usuario = usuario; data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox); data_DatosFox.Read_DatosFox(); data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor); data_Contribuyente.Read_Contribuyente(); }
public GenerarComunicacionBaja(Window parent, Data_Usuario usuario) { InitializeComponent(); padre = parent; data_Usuario = usuario; Data_Documentos documentos = new Data_Documentos(); _Documentos = (IGetDataAsync)documentos; data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox); data_DatosFox.Read_DatosFox(); data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor); data_Contribuyente.Read_Contribuyente(); }
public Page_ListaResumenDiario(Window parent, Data_Usuario usuario) { InitializeComponent(); padre = parent; data_Usuario = usuario; Data_Documentos documentos = new Data_Documentos(); _Documentos = (IGetDataAsync)documentos; data_DatosFox = new Data_DatosFox(data_Usuario.IdDatosFox); data_DatosFox.Read_DatosFox(); data_Contribuyente = new Data_Contribuyente(data_DatosFox.IdEmisor); data_Contribuyente.Read_Contribuyente(); }
private void btnGuardar_Click(object sender, RoutedEventArgs e) { Data_Documentos data_Documento = new Data_Documentos() { IdDocumento = IdDocumento, MotivoBaja = txtDetalleMotivoBaja.Text.ToString() }; if (!data_Documento.Update_Documento_OneColumn("[dbo].[Update_Documento_MotivoBaja]")) { Data_Log data_Log = new Data_Log() { DetalleError = "Error al actualizar el motivo de baja del documento", Comentario = "Error con la base de datos: [dbo].[Update_Documento_MotivoBaja]", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { Close(); } }
public EnviarDocumentoRequest Data(string tramaXmlFirmado, Data_Documentos data_Documento, string endPointUrl) { Data_AccesosSunat data_AccesosSunat = new Data_AccesosSunat(data_Documento.IdEmisor); data_AccesosSunat.Read_AccesosSunat(); Data_Contribuyente data_Contribuyente = new Data_Contribuyente(data_Documento.IdEmisor); data_Contribuyente.Read_Contribuyente(); var enviarDocumentoRequest = new EnviarDocumentoRequest() { Ruc = data_Contribuyente.NroDocumento, UsuarioSol = data_AccesosSunat.UsuarioSol, ClaveSol = data_AccesosSunat.ClaveSol, EndPointUrl = endPointUrl, IdDocumento = data_Documento.SerieCorrelativo, TipoDocumento = data_Documento.TipoDocumento, TramaXmlFirmado = tramaXmlFirmado }; return(enviarDocumentoRequest); }
public string PostResumen(List <Data_Documentos> data_Documentos) { string mensajeRespuesta = string.Empty; try { GenerarResumenDiario generarResumenDiario = new GenerarResumenDiario(); ResumenDiario resumenDiario = generarResumenDiario.Data(data_Documentos); DocumentoResponse response = generarResumenDiario.Post(resumenDiario); if (!response.Exito) { Data_Log data_Log = new Data_Log() { DetalleError = response.MensajeError, Comentario = $"El XML con identificador: {resumenDiario.IdDocumento} no se pudo generar", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { string rutaArchivo = Path.Combine(data_Documentos[0].Ruta, $"{resumenDiario.IdDocumento}.xml"); Firmar firmar = new Firmar(); FirmadoRequest firmadoRequest = firmar.Data(data_Usuario.IdAccesosSunat, response.TramaXmlSinFirma); FirmadoResponse firmadoResponse = firmar.Post(firmadoRequest, true); // Ya se obtuvo el documento firmado if (firmadoResponse.Exito) // Comprobamos que se haya firmado de forma correcta { EnviarSunat enviarSunat = new EnviarSunat(); EnviarDocumentoRequest enviarDocumentoRequest = enviarSunat.Data(firmadoResponse.TramaXmlFirmado, data_Documentos[0], GetURL("03")); string nombreZip = $"{resumenDiario.Emisor.NroDocumento}-{resumenDiario.IdDocumento}"; EnviarResumenResponse enviarResumenResponse = enviarSunat.Post_Figurativo(enviarDocumentoRequest, nombreZip); if (enviarResumenResponse.Exito) // Comprobar envío a sunat { ConsultaConstanciaRequest consultaConstanciaRequest = new ConsultaConstanciaRequest() { Ruc = enviarDocumentoRequest.Ruc, UsuarioSol = enviarDocumentoRequest.UsuarioSol, ClaveSol = enviarDocumentoRequest.ClaveSol, EndPointUrl = " https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService" }; Consultar consultar = new Consultar(); EnviarDocumentoResponse enviarDocumentoResponse = consultar.Post_Constancia(consultaConstanciaRequest); if (enviarDocumentoResponse.Exito) { mensajeRespuesta = $"El resumen diario ha realizado con éxito, detalle: {enviarDocumentoResponse.MensajeRespuesta}"; } else { mensajeRespuesta = "El resumen diario ha realizado con éxito, pero hemos tenido inconvenietes al obtener" + " el CDR del documento: " + resumenDiario.IdDocumento + ", probablemente se este empleado el usuario MODDATOS," + "para obtener el CDR debes descargarlo de forma manual en la opción 'Consulta de CDR'"; data_Log = new Data_Log() { DetalleError = mensajeRespuesta, Comentario = $"Ha ocurrido un error al generar el CDR del resumen diario: {resumenDiario.IdDocumento}, probablemente se este empleado MODDATOS", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } Data_DocumentoFigurativo data_DocumentoFigurativo = new Data_DocumentoFigurativo() { XMLFirmado = firmadoResponse.TramaXmlFirmado, Tipo = "Resumen diario", ComentarioDocumento = mensajeRespuesta, Identificador = resumenDiario.IdDocumento, NumeroTicket = enviarResumenResponse.NroTicket, CdrSunat = enviarDocumentoResponse.TramaZipCdr ?? string.Empty }; if (!data_DocumentoFigurativo.Create_DocumentoFigurativo()) { data_Log = new Data_Log() { DetalleError = "Error inesperado en la base de datos", Comentario = "Ha ocurrido un error al guardar el registro del resumen diario", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } else { Data_DocumentoFigurativo dataUnion_DocumentoFigurativo; Data_Documentos updateDocumento; foreach (var data_Documento in data_Documentos) { dataUnion_DocumentoFigurativo = new Data_DocumentoFigurativo() { IdDocumentoFigurativo = data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE, IdDocumento = data_Documento.IdDocumento }; if (!dataUnion_DocumentoFigurativo.Create_Figurativo_Documentos()) { data_Log = new Data_Log() { DetalleError = $"Detalle de tablas: Documentos {data_Documento.IdDocumento},{data_Documento.SerieCorrelativo} con la " + $"tabla Figurativo_Documentos {data_DocumentoFigurativo.SCOPE_IDENTITY_VALUE}, {data_DocumentoFigurativo.Identificador} ", Comentario = "Ha ocurrido un error al guardar el registro del resumen diario, en la tabla de unión", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } updateDocumento = new Data_Documentos() { IdDocumento = data_Documento.IdDocumento, EnviadoSunat = true, EstadoSunat = "Aceptado", ComentarioDocumento = $"El documento figura dentro del resumen diario con el código de identificación: {data_DocumentoFigurativo.Identificador}", ComunicacionBaja = false, }; if (!updateDocumento.Update_Documento()) { data_Log = new Data_Log() { DetalleError = $"No se ha podido actualizar el documento{data_Documento.IdDocumento}, {data_Documento.SerieCorrelativo} para indicar que resumen diario", Comentario = "Error en la base de datos", IdUser_Empresa = data_Usuario.IdUser_Empresa }; data_Log.Create_Log(); } } } } else { mensajeRespuesta = enviarResumenResponse.MensajeError; data_Log = new Data_Log() { DetalleError = enviarResumenResponse.MensajeError, Comentario = "Error al crear resumen diario", 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(); } } } 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(); mensajeRespuesta = $"Detalle del error: {msg}"; } return(mensajeRespuesta); }
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}"); } }
/// <summary> /// IMPORTANTE /// Este método obtiene todos los datos del documento electrónico, por el momento esta como sincrono para testing pero en producción se pondrá como asíncrono /// </summary> /// <param name="data_Documento"></param> /// <returns></returns> public DocumentoElectronico data(Data_Documentos data_Documento) { DocumentoElectronico documento; try { Data_CabeceraDocumento cabeceraDocumento = new Data_CabeceraDocumento(data_Documento.IdCabeceraDocumento); cabeceraDocumento.Read_CabeceraDocumento(); documento = new DocumentoElectronico() // Documento principal { SerieCorrelativo = data_Documento.SerieCorrelativo, TipoDocumento = data_Documento.TipoDocumento ?? string.Empty, FechaEmision = cabeceraDocumento.FechaEmision, HoraEmision = cabeceraDocumento.HoraEmision, FechaVencimiento = cabeceraDocumento.FechaVencimiento, OrdenCompra = cabeceraDocumento.OrdenCompra, Moneda = cabeceraDocumento.Moneda, TipoOperacion = cabeceraDocumento.TipoOperacion, MontoEnLetras = cabeceraDocumento.MontoEnLetras ?? string.Empty, CantidadItems = cabeceraDocumento.CantidadItems, TotalValorVenta = cabeceraDocumento.TotalValorVenta, TotalPrecioVenta = cabeceraDocumento.TotalPrecioVenta, TotalDescuento = cabeceraDocumento.TotalDescuento, TotalOtrosCargos = cabeceraDocumento.TotalOtrosCargos, TotalAnticipos = cabeceraDocumento.TotalAnticipos, ImporteTotalVenta = cabeceraDocumento.ImporteTotalVenta }; #region Emisor Data_Contribuyente Emisor = new Data_Contribuyente(data_Documento.IdEmisor); Emisor.Read_Contribuyente(); documento.Emisor = Emisor; #endregion Emisor #region Receptor Data_Contribuyente Receptor = new Data_Contribuyente(cabeceraDocumento.IdReceptor); Receptor.Read_Contribuyente(); documento.Receptor = Receptor; documento.Receptor.OtrosParticipantes = new List <Contribuyente>(); // Pendiente crear entidad OtrosParticipantes #endregion Receptor #region documentoDetalle Data_DocumentoDetalle data_DocumentoDetalle = new Data_DocumentoDetalle(data_Documento.IdCabeceraDocumento); List <DetalleDocumento> detalleDocumentos = data_DocumentoDetalle.Read_DocumentoDetalle(); if (detalleDocumentos.Count > 0) // Validar en caso de que no haya detalles del documento { foreach (var detalleDocumento in detalleDocumentos) { #region lineaTotalImpuesto Data_TotalImpuesto lineaTotalImpuesto = new Data_TotalImpuesto(detalleDocumento.IdDocumentoDetalle); List <TotalImpuesto> lineaTotalImpuestos = lineaTotalImpuesto.Read_TotalImpuestos(2); // El parámetro -> 2 <- es indicativo de que es por cada línea foreach (var st_totalImpuesto in lineaTotalImpuestos) { Data_SubTotalImpuesto data_SubTotalImpuesto = new Data_SubTotalImpuesto(st_totalImpuesto.IdTotalImpuestos); List <SubTotalImpuestos> subTotalImpuestos = data_SubTotalImpuesto.Read_SubTotalImpuesto(); st_totalImpuesto.SubTotalesImpuestos = subTotalImpuestos; } detalleDocumento.TotalImpuestos = lineaTotalImpuestos; #endregion lineaTotalImpuesto #region Notas Data_Nota lineaData_Nota = new Data_Nota(detalleDocumento.IdDocumentoDetalle); // Parámetro es el id de cabecera de documento List <Nota> lineaNotas = lineaData_Nota.Read(2); detalleDocumento.Notas = lineaNotas; #endregion Notas #region Descripciones List <Descripcion> descripciones = data_DocumentoDetalle.Read_Descripcion(detalleDocumento.IdDocumentoDetalle); detalleDocumento.Descripciones = descripciones; #endregion Descripciones #region PrecioAlternativo Data_PrecioAlternativo data_PrecioAlternativo = new Data_PrecioAlternativo(detalleDocumento.IdDocumentoDetalle); List <PrecioAlternativo> precioAlternativos = data_PrecioAlternativo.Read_PrecioAlternativo(); detalleDocumento.PreciosAlternativos = precioAlternativos; #endregion PrecioAlternativo #region emergency List <Descuento> descuentos = new List <Descuento>(); detalleDocumento.Descuentos = descuentos; List <PropiedadAdicional> propiedadAdicionales = new List <PropiedadAdicional>(); detalleDocumento.PropiedadesAdicionales = propiedadAdicionales; List <Entrega> entregas1 = new List <Entrega>(); Entrega data_entrega; data_entrega = new Entrega() { Cantidad = 0, MaximaCantidad = 0, Envio = new Envio(), }; entregas1.Add(data_entrega); detalleDocumento.Entregas = entregas1; #endregion emergency } documento.DetalleDocumentos = detalleDocumentos; } #endregion documentoDetalle #region TotalImpuestos Data_TotalImpuesto data_TotalImpuesto = new Data_TotalImpuesto(data_Documento.IdCabeceraDocumento); List <TotalImpuesto> totalImpuestos = data_TotalImpuesto.Read_TotalImpuestos(1); // El parámetro -> 1 <- es indicativo de que es por cada línea foreach (var st_totalImpuesto in totalImpuestos) { Data_SubTotalImpuesto data_SubTotalImpuesto = new Data_SubTotalImpuesto(st_totalImpuesto.IdTotalImpuestos); List <SubTotalImpuestos> subTotalImpuestos = data_SubTotalImpuesto.Read_SubTotalImpuesto(); st_totalImpuesto.SubTotalesImpuestos = subTotalImpuestos; } documento.TotalImpuestos = totalImpuestos; #endregion TotalImpuestos #region Notas Data_Nota data_Nota = new Data_Nota(data_Documento.IdCabeceraDocumento); // Parámetro es el id de cabecera de documento List <Nota> notas = data_Nota.Read(1); documento.Notas = notas; #endregion Notas #region TerminosEntregas Data_TerminosEntrega data_TerminosEntrega = new Data_TerminosEntrega(data_Documento.IdCabeceraDocumento); data_TerminosEntrega.Read_TerminosEntrega(); // El parámetro -> 1 <- es indicativo de que es por cada línea documento.TerminosEntrega = data_TerminosEntrega; #endregion TerminosEntregas #region Anticipos Data_Anticipo anticipo = new Data_Anticipo(data_Documento.IdCabeceraDocumento); List <Anticipo> anticipos = anticipo.Read_Anticipo(); documento.Anticipos = anticipos; #endregion Anticipos List <PeriodoFactura> periodoFacturas = null; List <DocumentoRelacionado> documentoRelacionados = null; List <DocumentoRelacionado> otrosDocumentosRelacionados = null; List <Entrega> entregas = null; List <MedioPago> medioPagos = null; List <Descuento> item_descuentos = null; documento.Relacionados = documentoRelacionados; documento.OtrosDocumentosRelacionados = otrosDocumentosRelacionados; documento.Entregas = entregas; documento.MedioPagos = medioPagos; documento.Descuentos = item_descuentos; documento.PeriodosFactura = periodoFacturas; } catch (Exception ex) { documento = new DocumentoElectronico(); } return(documento); }
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; }