private static void CrearFactura()
        {
            try
            {
                Console.WriteLine("Ejemplo Factura");
                var documento = new DocumentoElectronico
                {
                    Emisor   = CrearEmisor(),
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = "20100039207",
                        TipoDocumento = "6",
                        NombreLegal   = "RANSA COMERCIAL S.A."
                    },
                    IdDocumento       = "FF11-001",
                    FechaEmision      = DateTime.Today.AddDays(-5).ToString(FormatoFecha),
                    Moneda            = "PEN",
                    MontoEnLetras     = "SON CIENTO DIECIOCHO SOLES CON 0/100",
                    CalculoIgv        = 0.18m,
                    CalculoIsc        = 0.10m,
                    CalculoDetraccion = 0.04m,
                    TipoDocumento     = "01",
                    TotalIgv          = 18,
                    TotalVenta        = 118,
                    Gravadas          = 100,
                    Items             = new List <DetalleDocumento>
                    {
                        new DetalleDocumento
                        {
                            Id                = 1,
                            Cantidad          = 5,
                            PrecioReferencial = 20,
                            PrecioUnitario    = 20,
                            TipoPrecio        = "01",
                            CodigoItem        = "1234234",
                            Descripcion       = "Arroz Costeño",
                            UnidadMedida      = "KG",
                            Impuesto          = 18,
                            TipoImpuesto      = "10", // Gravada
                            TotalVenta        = 100,
                            Suma              = 100
                        }
                    }
                };

                Console.WriteLine("Generando XML....");

                var client = new RestClient(BaseUrl);

                var requestInvoice = new RestRequest("GenerarFactura", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                requestInvoice.AddBody(documento);

                var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);

                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }

                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = false
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documento.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = UrlSunat,
                    IdDocumento     = documento.IdDocumento,
                    TipoDocumento   = documento.TipoDocumento,
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var requestSendBill = new RestRequest("EnviarDocumento", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestSendBill.AddBody(sendBill);

                var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill);

                if (!responseSendBill.Data.Exito)
                {
                    throw new ApplicationException(responseSendBill.Data.MensajeError);
                }

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(responseSendBill.Data.MensajeRespuesta);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
        private static void CrearComunicacionBaja()
        {
            try
            {
                Console.WriteLine("Ejemplo de Comunicación de Baja");
                var documentoBaja = new ComunicacionBaja
                {
                    IdDocumento     = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today),
                    FechaEmision    = DateTime.Today.ToString(FormatoFecha),
                    FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha),
                    Emisor          = CrearEmisor(),
                    Bajas           = new List <DocumentoBaja>()
                };

                documentoBaja.Bajas.Add(new DocumentoBaja
                {
                    Id            = 1,
                    Correlativo   = "33386",
                    TipoDocumento = "03",
                    Serie         = "BB50",
                    MotivoBaja    = "Anulación por otro tipo de documento"
                });
                documentoBaja.Bajas.Add(new DocumentoBaja
                {
                    Id            = 2,
                    Correlativo   = "86486",
                    TipoDocumento = "01",
                    Serie         = "FF14",
                    MotivoBaja    = "Anulación por otro datos erroneos"
                });

                Console.WriteLine("Generando XML....");
                var client         = new RestClient(BaseUrl);
                var requestInvoice = new RestRequest("GenerarComunicacionBaja", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestInvoice.AddBody(documentoBaja);
                var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);
                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }
                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = true
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documentoBaja.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = UrlSunat,
                    IdDocumento     = documentoBaja.IdDocumento,
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var restRequest = new RestRequest("EnviarResumen", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                restRequest.AddBody(sendBill);

                var restResponse = client.Execute <EnviarResumenResponse>(restRequest);

                if (!restResponse.Data.Exito)
                {
                    throw new ApplicationException(restResponse.Data.MensajeError);
                }

                Console.WriteLine("Nro de Ticket: {0}", restResponse.Data.NroTicket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
        private static void CrearDocumentoRetencion()
        {
            try
            {
                Console.WriteLine("Ejemplo de Retención");
                var documento = new DocumentoRetencion
                {
                    Emisor   = CrearEmisor(),
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = "20100039207",
                        TipoDocumento = "6",
                        NombreLegal   = "RANSA COMERCIAL S.A.",
                        Ubigeo        = "150101",
                        Direccion     = "Av. Argentina 2833",
                        Urbanizacion  = "-",
                        Departamento  = "CALLAO",
                        Provincia     = "CALLAO",
                        Distrito      = "CALLAO"
                    },
                    IdDocumento            = "R001-123",
                    FechaEmision           = DateTime.Today.ToString(FormatoFecha),
                    Moneda                 = "PEN",
                    RegimenRetencion       = "01",
                    TasaRetencion          = 3,
                    ImporteTotalRetenido   = 300,
                    ImporteTotalPagado     = 10000,
                    Observaciones          = "Emision de Facturas del periodo Dic. 2016",
                    DocumentosRelacionados = new List <ItemRetencion>
                    {
                        new ItemRetencion
                        {
                            NroDocumento  = "E001-457",
                            TipoDocumento = "01",
                            MonedaDocumentoRelacionado = "USD",
                            FechaEmision        = DateTime.Today.AddDays(-3).ToString(FormatoFecha),
                            ImporteTotal        = 10000,
                            FechaPago           = DateTime.Today.ToString(FormatoFecha),
                            NumeroPago          = 153,
                            ImporteSinRetencion = 9700,
                            ImporteRetenido     = 300,
                            FechaRetencion      = DateTime.Today.ToString(FormatoFecha),
                            ImporteTotalNeto    = 10000,
                            TipoCambio          = 3.41m,
                            FechaTipoCambio     = DateTime.Today.ToString(FormatoFecha)
                        }
                    }
                };

                Console.WriteLine("Generando XML....");

                var client = new RestClient(BaseUrl);

                var requestRetencion = new RestRequest("GenerarRetencion", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                requestRetencion.AddBody(documento);

                var documentoResponse = client.Execute <DocumentoResponse>(requestRetencion);

                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }

                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = true
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando Retención a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documento.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = "https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService",
                    IdDocumento     = documento.IdDocumento,
                    TipoDocumento   = "20",
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var requestSendBill = new RestRequest("EnviarDocumento", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestSendBill.AddBody(sendBill);

                var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill);

                if (!responseSendBill.Data.Exito)
                {
                    throw new ApplicationException(responseSendBill.Data.MensajeError);
                }

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(responseSendBill.Data.MensajeRespuesta);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Esempio n. 4
0
        private async void btnGen_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;
                string codigoTipoDoc;
                switch (cboTipoDoc.SelectedIndex)
                {
                case 0:
                    codigoTipoDoc = "01";
                    break;

                case 1:
                    codigoTipoDoc = "03";
                    break;

                case 2:
                    codigoTipoDoc = "07";
                    break;

                case 3:
                    codigoTipoDoc = "08";
                    break;

                case 4:
                    codigoTipoDoc = "20";
                    break;

                case 5:
                    codigoTipoDoc = "40";
                    break;

                case 6:
                    codigoTipoDoc = "RC";
                    break;

                case 7:
                    codigoTipoDoc = "RA";
                    break;

                default:
                    codigoTipoDoc = "01";
                    break;
                }

                var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(txtSource.Text));

                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)),
                    PasswordCertificado = txtPassCertificado.Text,
                    UnSoloNodoExtension = rbRetenciones.Checked || rbResumen.Checked
                };

                var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest);

                var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>();

                if (!respuestaFirmado.Exito)
                {
                    throw new ApplicationException(respuestaFirmado.MensajeError);
                }

                var enviarDocumentoRequest = new EnviarDocumentoRequest
                {
                    Ruc             = txtNroRuc.Text,
                    UsuarioSol      = txtUsuarioSol.Text,
                    ClaveSol        = txtClaveSol.Text,
                    EndPointUrl     = ValorSeleccionado(),
                    IdDocumento     = txtSerieCorrelativo.Text,
                    TipoDocumento   = codigoTipoDoc,
                    TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
                };

                var apiMetodo = rbResumen.Checked ? "api/EnviarResumen" : "api/EnviarDocumento";

                var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest);

                var respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarDocumentoResponse>();

                if (!respuestaEnvio.Exito)
                {
                    throw new ApplicationException(respuestaEnvio.MensajeError);
                }

                txtResult.Text = $"{Resources.procesoCorrecto}{Environment.NewLine}{respuestaEnvio.MensajeRespuesta}";

                try
                {
                    File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}.xml",
                                       Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                    File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                                       Convert.FromBase64String(respuestaEnvio.TramaZipCdr));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                if (chkVoz.Checked)
                {
                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        private static void CrearResumenDiario()
        {
            try
            {
                Console.WriteLine("Ejemplo de Resumen Diario");
                var documentoResumenDiario = new ResumenDiarioNuevo
                {
                    IdDocumento     = string.Format("RC-{0:yyyyMMdd}-001", DateTime.Today),
                    FechaEmision    = DateTime.Today.ToString(FormatoFecha),
                    FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha),
                    Emisor          = CrearEmisor(),
                    Resumenes       = new List <GrupoResumenNuevo>()
                };

                documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo
                {
                    Id                    = 1,
                    TipoDocumento         = "03",
                    IdDocumento           = "BB14-33386",
                    NroDocumentoReceptor  = "41614074",
                    TipoDocumentoReceptor = "1",
                    CodigoEstadoItem      = 1,
                    Moneda                = "PEN",
                    TotalVenta            = 190.9m,
                    TotalIgv              = 29.12m,
                    Gravadas              = 161.78m,
                });
                documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo
                {
                    Id                    = 2,
                    TipoDocumento         = "03",
                    IdDocumento           = "BB30-33384",
                    NroDocumentoReceptor  = "08506678",
                    TipoDocumentoReceptor = "1",
                    CodigoEstadoItem      = 1,
                    Moneda                = "USD",
                    TotalVenta            = 9580m,
                    TotalIgv              = 1411.36m,
                    Gravadas              = 8168.64m,
                });


                Console.WriteLine("Generando XML....");
                var client         = new RestClient(BaseUrl);
                var requestInvoice = new RestRequest("GenerarResumenDiario/v2", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestInvoice.AddBody(documentoResumenDiario);
                var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);
                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }

                File.WriteAllBytes("resumendiario.xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma));

                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = true
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documentoResumenDiario.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = UrlSunat,
                    IdDocumento     = documentoResumenDiario.IdDocumento,
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var restRequest = new RestRequest("EnviarResumen", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                restRequest.AddBody(sendBill);

                var restResponse = client.Execute <EnviarResumenResponse>(restRequest);

                if (!restResponse.Data.Exito)
                {
                    throw new ApplicationException(restResponse.Data.MensajeError);
                }

                Console.WriteLine("Nro de Ticket: {0}", restResponse.Data.NroTicket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Esempio n. 6
0
        public void EnvioSunat()
        {
            try
            {
                var estadoProceso = Negocio.Helper.ObtenerValorParametro("ESTADO_SERVICIO_WINDOWS").ToString();

                if (estadoProceso.Equals("P"))
                {
                    return;
                }

                if (estadoProceso.Equals("N"))
                {
                    Negocio.Helper.ActualizarColumnasTabla("ParametrosGlobales", new string[] { "ValorParametro" }, new string[] { "P" }, new string[] { "NombreParametro" }, new string[] { "ESTADO_SERVICIO_WINDOWS" });
                    var ventaPendienteListaInfo = new Venta().Listar(0).Where(v => v.Exito.Equals(0)).ToList();

                    foreach (var v in ventaPendienteListaInfo)
                    {
                        //var ventaId = 1;
                        var ventaId = v.VentaId;
                        var mensaje = String.Empty;

                        //var usuarioInfo = ObtenerUsuarioInfo();
                        var usuarioInfo      = new Usuario().Listar(1, "", "", "", 0, 0).FirstOrDefault();
                        var ventaInfo        = new Venta().Listar(ventaId).FirstOrDefault();
                        var ventaDetalleInfo = new Venta().ListarDetalle(ventaId, 0);
                        var empresaInfo      = new Empresa().Listar(usuarioInfo.EmpresaId).FirstOrDefault();
                        var clienteInfo      = new Cliente().Listar(ventaInfo.ClienteId).FirstOrDefault();

                        _documento = new DocumentoElectronico();

                        #region Documento
                        _documento.CalculoDetraccion = 0;
                        _documento.CalculoIgv        = Decimal.Divide(18, 100);
                        _documento.CalculoIsc        = 0;
                        _documento.DescuentoGlobal   = ventaInfo.Descuento;
                        // _documento.DocAnticipo = String.Empty;

                        #region Emisor
                        var emisor = new DocumentoElectronico().Emisor;
                        emisor.Departamento = empresaInfo.Departamento;
                        //emisor.Departamento = "LIMA";
                        emisor.Direccion = empresaInfo.Direccion;
                        //emisor.Direccion = "LADERAS DE CHILLON";
                        emisor.Distrito = empresaInfo.Distrito;
                        //emisor.Distrito = "PUENTE PIEDRA";
                        emisor.NombreComercial = empresaInfo.RazonSocial;
                        emisor.NombreLegal     = empresaInfo.RazonSocial;
                        //emisor.NombreComercial = "ABARCA URBANO";
                        //emisor.NombreLegal = "MIGUEL ABARCA URBANO";
                        //emisor.NroDocumento = empresaInfo.NumeroDocumento;
                        emisor.NroDocumento = "10421895452";
                        emisor.Provincia    = empresaInfo.Provincia;
                        //emisor.Provincia = "LIMA";
                        emisor.TipoDocumento = empresaInfo.TipoDocumentoId.ToString();
                        emisor.Ubigeo        = empresaInfo.Departamento;
                        emisor.Urbanizacion  = empresaInfo.Direccion;
                        //emisor.Urbanizacion = "LADERAS DE CHILLON";
                        _documento.Emisor = emisor;
                        #endregion

                        _documento.Exoneradas   = 0;
                        _documento.FechaEmision = ventaInfo.FechaEmision.ToString("dd/MM/yyyy");
                        //_documento.FechaEmision = "2017-11-27";
                        _documento.Gratuitas = 0;
                        _documento.Gravadas  = ventaInfo.MontoVenta;
                        //_documento.Gravadas = 1000;
                        _documento.IdDocumento = ventaInfo.NumeroSerie + "-" + ventaInfo.NumeroComprobante;
                        _documento.Inafectas   = 0;

                        #region Items
                        var itemId = 1;
                        foreach (var vd in ventaDetalleInfo)
                        {
                            var item = new DetalleDocumento();
                            item.Cantidad = vd.Cantidad;
                            // item.CodigoItem = vd.Codigo;

                            item.Descripcion = vd.Producto;
                            //item.Descuento = vd.Descuento;
                            item.Id = itemId;
                            itemId++;
                            item.Impuesto = vd.Igv;
                            //item.ImpuestoSelectivo = 0;
                            //item.OtroImpuesto = 0;
                            //item.PrecioReferencial = 0;
                            item.PrecioUnitario = vd.PrecioUnitario;
                            item.Suma           = vd.SubTotal;
                            //item.TipoImpuesto = "10";
                            //item.TipoPrecio = "01";
                            item.TotalVenta   = vd.MontoTotal;
                            item.UnidadMedida = vd.UnidadMedida;
                            //item.CodigoItem = "A0001";
                            item.Descuento = 0;
                            //item.Id = 1;
                            item.ImpuestoSelectivo = 0;
                            item.OtroImpuesto      = 0;
                            item.PrecioReferencial = 0;
                            // item.PrecioUnitario = 50;
                            item.TipoImpuesto = "10";
                            item.TipoPrecio   = "01";
                            // item.UnidadMedida = "NIU";
                            _documento.Items.Add(item);
                        }
                        #endregion

                        _documento.Moneda = ventaInfo.MonedaId.Equals(Constantes.MonedaSoles) ? Constantes.MonedaSolesSunat : Constantes.MonedaDolaresSunat;
                        // _documento.MonedaAnticipo = 0.18;
                        _documento.MontoAnticipo   = 0;
                        _documento.MontoDetraccion = 0;
                        _documento.MontoEnLetras   = Herramientas.NumeroALetras.numeroAletras(ventaInfo.MontoVenta);
                        //_documento.MontoEnLetras = "MIL";
                        _documento.MontoPercepcion = 0;
                        // _documento.PlacaVehiculo = ventaInfo.Placa;

                        #region Receptor
                        var receptor = new DocumentoElectronico().Receptor;
                        receptor.Departamento    = clienteInfo.Departamento;
                        receptor.Direccion       = clienteInfo.Direccion;
                        receptor.Distrito        = clienteInfo.Distrito;
                        receptor.NombreComercial = clienteInfo.RazonSocial;
                        receptor.NombreLegal     = clienteInfo.RazonSocial;
                        //receptor.NombreComercial = "RENE ABARCA URBANO";
                        //receptor.NombreLegal = "RENE ABARCA URBANO";
                        //receptor.NroDocumento = clienteInfo.NumeroDocumento;
                        receptor.NroDocumento  = "10415787796";
                        receptor.Provincia     = clienteInfo.Provincia;
                        receptor.TipoDocumento = clienteInfo.TipoDocumentoId.ToString();
                        receptor.Ubigeo        = clienteInfo.Departamento;
                        receptor.Urbanizacion  = clienteInfo.Direccion;
                        _documento.Receptor    = receptor;
                        #endregion

                        // _documento.TipoDocAnticipo = 0;
                        _documento.TipoDocumento = ventaInfo.TipoComprobanteId;
                        // _documento.TipoOperacion = ventaInfo.TipoOperacionId;
                        _documento.TotalIgv = ventaInfo.MontoImpuesto;
                        //_documento.TotalIgv = 180;
                        _documento.TotalIsc           = 0;
                        _documento.TotalOtrosTributos = 0;
                        _documento.TotalVenta         = ventaInfo.MontoTotal;
                        //_documento.TotalVenta = 1180;
                        #endregion

                        //var proxy = new HttpClient { BaseAddress = new Uri(ConfigurationManager.AppSettings["UrlOpenInvoicePeruApi"]) };

                        string metodoApi;
                        switch (_documento.TipoDocumento)
                        {
                        case "07":
                            metodoApi = "api/GenerarNotaCredito";
                            break;

                        case "08":
                            metodoApi = "api/GenerarNotaDebito";
                            break;

                        default:
                            metodoApi = "api/GenerarFactura";
                            break;
                        }

                        //var response = await proxy.PostAsJsonAsync(metodoApi, _documento);
                        //var respuesta = await response.Content.ReadAsAsync<DocumentoResponse>();

                        #region Generando XML
                        var client = new RestClient(BaseUrl);

                        var requestInvoice = new RestRequest("GenerarFactura", Method.POST)
                        {
                            RequestFormat = DataFormat.Json
                        };

                        requestInvoice.AddBody(_documento);

                        var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);

                        if (!documentoResponse.Data.Exito)
                        {
                            throw new ApplicationException(documentoResponse.Data.MensajeError);
                        }
                        //string rutaXml = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/" + _documento.IdDocumento + ".xml");
                        string rutaXml = @"D:\ASOLUTIONS\APU\APU.Presentacion\Archivos\Facturacion\XML\" + _documento.IdDocumento + ".xml";
                        File.WriteAllBytes(rutaXml, Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma));
                        #endregion

                        #region Firma
                        //string rutaCertificado = HostingEnvironment.MapPath("~/Archivos/Facturacion/certificado.pfx");
                        var rutaCertificado = @"D:\ASOLUTIONS\APU\APU.Presentacion\certificado.pfx";
                        var firmado         = new FirmadoRequest
                        {
                            TramaXmlSinFirma = documentoResponse.Data.TramaXmlSinFirma,
                            //CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes("certificado.pfx")),
                            CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)),
                            PasswordCertificado = string.Empty,
                            UnSoloNodoExtension = false
                        };

                        var requestFirma = new RestRequest("Firmar", Method.POST)
                        {
                            RequestFormat = DataFormat.Json
                        };
                        requestFirma.AddBody(firmado);

                        var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                        if (!responseFirma.Data.Exito)
                        {
                            throw new ApplicationException(responseFirma.Data.MensajeError);
                        }
                        //string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/" + _documento.IdDocumento + "_Firmado.xml");
                        string rutaXmlFirmado = @"D:\ASOLUTIONS\APU\APU.Presentacion\Archivos\Facturacion\XML\" + _documento.IdDocumento + "_Firmado.xml";
                        File.WriteAllBytes(rutaXmlFirmado, Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));
                        #endregion

                        #region Envio SUNAT
                        var sendBill = new EnviarDocumentoRequest
                        {
                            //Ruc = _documento.Emisor.NroDocumento,
                            Ruc = "10421895452",
                            //UsuarioSol = "MODDATOS",
                            UsuarioSol = "MMINSIOT",
                            //ClaveSol = "MODDATOS",
                            ClaveSol        = "saywalcod",
                            EndPointUrl     = UrlSunat,
                            IdDocumento     = _documento.IdDocumento,
                            TipoDocumento   = _documento.TipoDocumento,
                            TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                        };

                        var requestSendBill = new RestRequest("EnviarDocumento", Method.POST)
                        {
                            RequestFormat = DataFormat.Json
                        };
                        requestSendBill.AddBody(sendBill);

                        var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill);

                        if (!responseSendBill.Data.Exito)
                        {
                            // throw new ApplicationException(responseSendBill.Data.MensajeError);
                        }
                        else
                        {
                            //string rutaCdr = HostingEnvironment.MapPath("~/Archivos/Facturacion/CDR/" + responseSendBill.Data.NombreArchivo + ".zip");
                            string rutaCdr = @"D:\ASOLUTIONS\APU\APU.Presentacion\Archivos\Facturacion\CDR\" + responseSendBill.Data.NombreArchivo + ".zip";
                            File.WriteAllBytes(rutaCdr, Convert.FromBase64String(responseSendBill.Data.TramaZipCdr));
                        }

                        //Console.WriteLine("Respuesta de SUNAT:");
                        //Console.WriteLine(responseSendBill.Data.MensajeRespuesta);
                        var data = responseSendBill.Data;
                        mensaje = data.Exito ? data.MensajeRespuesta : data.MensajeError;

                        var ventaSunatInfo = new VentaSunatInfo();
                        ventaSunatInfo.VentaId           = ventaId;
                        ventaSunatInfo.CodigoRespuesta   = (data.CodigoRespuesta == null) ? String.Empty : data.CodigoRespuesta;
                        ventaSunatInfo.Exito             = data.Exito ? 1 : 0;
                        ventaSunatInfo.MensajeError      = (data.MensajeError == null) ? String.Empty : data.MensajeError;
                        ventaSunatInfo.MensajeRespuesta  = (data.MensajeRespuesta == null) ? String.Empty : data.MensajeRespuesta;
                        ventaSunatInfo.NombreArchivo     = (data.NombreArchivo == null) ? String.Empty : data.NombreArchivo;
                        ventaSunatInfo.Pila              = (data.Pila == null) ? String.Empty : data.Pila;
                        ventaSunatInfo.TramaZipCdr       = (data.TramaZipCdr == null) ? String.Empty : data.TramaZipCdr;
                        ventaSunatInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;
                        new VentaSunat().Insertar(ventaSunatInfo);
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
                // Console.WriteLine(e);
                System.Diagnostics.EventLog.WriteEntry("MyEventSource", ex.StackTrace, System.Diagnostics.EventLogEntryType.Warning);
            }
        }
Esempio n. 7
0
        private async void BtnGen_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;
                string codigoTipoDoc;
                switch (cboTipoDoc.SelectedIndex)
                {
                case 0:
                    codigoTipoDoc = "01";
                    break;

                case 1:
                    codigoTipoDoc = "03";
                    break;

                case 2:
                    codigoTipoDoc = "07";
                    break;

                case 3:
                    codigoTipoDoc = "08";
                    break;

                case 4:
                    codigoTipoDoc = "20";
                    break;

                case 5:
                    codigoTipoDoc = "40";
                    break;

                case 6:
                    codigoTipoDoc = "RC";
                    break;

                case 7:
                    codigoTipoDoc = "RA";
                    break;

                case 8:
                    codigoTipoDoc = "09";
                    break;

                default:
                    codigoTipoDoc = "01";
                    break;
                }

                if (string.IsNullOrEmpty(txtSerieCorrelativo.Text))
                {
                    throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos");
                }

                var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(txtSource.Text));

                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(txtRutaCertificado.Text)),
                    PasswordCertificado = txtPassCertificado.Text,
                    UnSoloNodoExtension = rbRetenciones.Checked || rbResumen.Checked
                };

                ICertificador certificador     = new Certificador();
                var           respuestaFirmado = await new Firmar(certificador).Post(firmadoRequest);

                if (!respuestaFirmado.Exito)
                {
                    throw new ApplicationException(respuestaFirmado.MensajeError);
                }

                var enviarDocumentoRequest = new EnviarDocumentoRequest
                {
                    Ruc             = txtNroRuc.Text,
                    UsuarioSol      = txtUsuarioSol.Text,
                    ClaveSol        = txtClaveSol.Text,
                    EndPointUrl     = ValorSeleccionado(),
                    IdDocumento     = txtSerieCorrelativo.Text,
                    TipoDocumento   = codigoTipoDoc,
                    TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
                };

                ISerializador            serializador            = new Serializador();
                IServicioSunatDocumentos servicioSunatDocumentos = new ServicioSunatDocumentos();

                RespuestaComunConArchivo respuestaEnvio;

                if (rbResumen.Checked && codigoTipoDoc != "09")
                {
                    respuestaEnvio = await new EnviarResumen(serializador, servicioSunatDocumentos).Post(enviarDocumentoRequest);
                }
                else
                {
                    respuestaEnvio = await new EnviarDocumento(serializador, servicioSunatDocumentos).Post(enviarDocumentoRequest);
                }

                if (!rbResumen.Checked)
                {
                    var rpta = (EnviarDocumentoResponse)respuestaEnvio;
                    txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}";
                    try
                    {
                        if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr))
                        {
                            File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}.xml",
                                               Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                            File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}.zip",
                                               Convert.FromBase64String(rpta.TramaZipCdr));
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    var rpta = (EnviarResumenResponse)respuestaEnvio;
                    txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}";
                }

                if (!respuestaEnvio.Exito)
                {
                    throw new ApplicationException(respuestaEnvio.MensajeError);
                }

                if (chkVoz.Checked)
                {
                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
        private static void CrearResumenDiario()
        {
            try
            {
                Console.WriteLine("Ejemplo de Resumen Diario");
                var documentoResumenDiario = new ResumenDiario
                {
                    IdDocumento     = string.Format("RC-{0:yyyyMMdd}-001", DateTime.Today),
                    FechaEmision    = DateTime.Today.ToString("yyyy-MM-dd"),
                    FechaReferencia = DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd"),
                    Emisor          = CrearEmisor(),
                    Resumenes       = new List <GrupoResumen>()
                };

                documentoResumenDiario.Resumenes.Add(new GrupoResumen
                {
                    Id = 1,
                    CorrelativoInicio = 33386,
                    CorrelativoFin    = 33390,
                    Moneda            = "PEN",
                    TotalVenta        = 190.9m,
                    TotalIgv          = 29.12m,
                    Gravadas          = 161.78m,
                    Exoneradas        = 0,
                    Exportacion       = 0,
                    TipoDocumento     = "03",
                    Serie             = "BB50"
                });
                documentoResumenDiario.Resumenes.Add(new GrupoResumen
                {
                    Id = 2,
                    CorrelativoInicio = 40000,
                    CorrelativoFin    = 40500,
                    Moneda            = "PEN",
                    TotalVenta        = 9580m,
                    TotalIgv          = 1411.36m,
                    Gravadas          = 8168.64m,
                    Exoneradas        = 0,
                    Exportacion       = 0,
                    TipoDocumento     = "03",
                    Serie             = "BB30"
                });


                Console.WriteLine("Generando XML....");
                var client         = new RestClient(BaseUrl);
                var requestInvoice = new RestRequest("GenerarResumenDiario", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestInvoice.AddBody(documentoResumenDiario);
                var documentoResponse = client.Execute <DocumentoResponse>(requestInvoice);
                if (!documentoResponse.Data.Exito)
                {
                    throw new ApplicationException(documentoResponse.Data.MensajeError);
                }
                Console.WriteLine("Firmando XML...");
                // Firmado del Documento.
                var firmado = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes("Certificado.pfx")),
                    PasswordCertificado = string.Empty,
                    UnSoloNodoExtension = true
                };

                var requestFirma = new RestRequest("Firmar", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                requestFirma.AddBody(firmado);

                var responseFirma = client.Execute <FirmadoResponse>(requestFirma);

                if (!responseFirma.Data.Exito)
                {
                    throw new ApplicationException(responseFirma.Data.MensajeError);
                }

                Console.WriteLine("Enviando a SUNAT....");

                var sendBill = new EnviarDocumentoRequest
                {
                    Ruc             = documentoResumenDiario.Emisor.NroDocumento,
                    UsuarioSol      = "MODDATOS",
                    ClaveSol        = "MODDATOS",
                    EndPointUrl     = UrlSunat,
                    IdDocumento     = documentoResumenDiario.IdDocumento,
                    TramaXmlFirmado = responseFirma.Data.TramaXmlFirmado
                };

                var requestSendBill = new RestRequest("EnviarResumen", Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };

                requestSendBill.AddBody(sendBill);

                var responseSendBill = client.Execute <EnviarDocumentoResponse>(requestSendBill);

                if (!responseSendBill.Data.Exito)
                {
                    throw new ApplicationException(responseSendBill.Data.MensajeError);
                }
                File.WriteAllBytes(string.Format(".\\{0}.xml", responseSendBill.Data.NombreArchivo), Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));

                File.WriteAllBytes(string.Format(".\\R-{0}.zip", responseSendBill.Data.NombreArchivo), Convert.FromBase64String(responseSendBill.Data.TramaZipCdr));


                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(responseSendBill.Data.MensajeRespuesta);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Firma y envia el documento xml a la SUNAT
        /// </summary>
        /// <param name="xmlSinFirma"></param>
        /// <param name="tipoDoc"></param>
        /// <param name="IdDocumento"></param>
        /// <param name="emisorNroDocumento"></param>
        /// <param name="rbResumen">Indicar si el documento a enviar es un resumen de boletas</param>
        /// <param name="RetencPercepGRem">Indicar si el documento a enviar es de retenciones</param>
        /// <returns></returns>
        async Task FirmaYEnviaASunat(String tramaXmlSinFirma, String codigoTipoDoc, String IdDocumento, String emisorNroDocumento, bool rbResumen, bool RetencPercepGRem, bool baja)
        {
            if (string.IsNullOrEmpty(IdDocumento))
            {
                throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos");
            }

            var firmadoRequest = new FirmadoRequest
            {
                TramaXmlSinFirma = tramaXmlSinFirma,
                //CertificadoDigital = Convert.ToBase64String(File.ReadAllBytes(_txtRutaCertificado)),
                CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(trxVenta.Ruta_clave)),
                PasswordCertificado = trxVenta.Contrasenia_clave,   // txtPassCertificado.Text,
                UnSoloNodoExtension = RetencPercepGRem || rbResumen || baja
            };

            var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest);

            jsonFirmado.EnsureSuccessStatusCode();

            var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>();

            if (!respuestaFirmado.Exito)
            {
                throw new ApplicationException(string.Concat("Excepción al firmar antes de enviar a la Sunat. ", respuestaFirmado.MensajeError));
            }

            if (!_Param.seguridadIntegrada)
            {
                String RutaArchivo       = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{trxVenta.DocElectronico.IdDocumento}frmdo.xml");
                byte[] bTramaXmlSinFirma = Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado);
                File.WriteAllBytes(RutaArchivo, bTramaXmlSinFirma);
            }

            var enviarDocumentoRequest = new EnviarDocumentoRequest
            {
                Ruc             = emisorNroDocumento,           // txtNroRuc.Text,
                UsuarioSol      = trxVenta.Ruta_certificadoPac, //txtUsuarioSol.Text,
                ClaveSol        = trxVenta.Contrasenia_clavePac,
                EndPointUrl     = _Param.URLwebServPAC,
                IdDocumento     = IdDocumento,
                TipoDocumento   = codigoTipoDoc,
                TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
            };

            var apiMetodo = (rbResumen || baja) && codigoTipoDoc != "09" ? "api/EnviarResumen" : "api/EnviarDocumento";

            var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest);

            jsonEnvioDocumento.EnsureSuccessStatusCode();

            RespuestaComunConArchivo respuestaEnvio;

            if (rbResumen || baja)
            {
                tramaXmlFirmado = respuestaFirmado.TramaXmlFirmado;
                respuestaEnvio  = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>();

                var rpta = (EnviarResumenResponse)respuestaEnvio;
                nroTicket = string.IsNullOrEmpty(rpta.NroTicket) ? String.Empty : rpta.NroTicket;
                //txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}";
                if (!respuestaEnvio.Exito)
                {
                    throw new ApplicationException(string.Concat("La respuesta de la Sunat es negativa para el resumen o baja. ", respuestaEnvio.MensajeError));
                }
            }
            else
            {
                respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarDocumentoResponse>();

                var rpta = (EnviarDocumentoResponse)respuestaEnvio;

                //txtResult.Text = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}";
                if (rpta.Exito)
                {
                    if (!string.IsNullOrEmpty(rpta.TramaZipCdr))
                    {
                        tramaXmlFirmado  = respuestaFirmado.TramaXmlFirmado;
                        tramaZipCdr      = rpta.TramaZipCdr;
                        nombreArchivoCdr = $"R-{respuestaEnvio.NombreArchivo}.zip";

                        _codigoRespuesta = rpta.CodigoRespuesta;

                        int iCodRespuesta = 0;
                        if (Int32.TryParse(rpta.CodigoRespuesta, out iCodRespuesta))
                        {
                            if (iCodRespuesta >= 100 && iCodRespuesta < 2000)
                            {
                                throw new ApplicationException(string.Concat("La SUNAT no procesó el comprobante. Codigo: ", rpta.CodigoRespuesta, " ", rpta.MensajeError, Environment.NewLine, rpta.MensajeRespuesta, " Corrija el problema e intente nuevamente."));
                            }
                        }
                        else
                        {
                            throw new ApplicationException(string.Concat("Código de respuesta desconocido. ", rpta.CodigoRespuesta, " ", rpta.MensajeError, Environment.NewLine, rpta.MensajeRespuesta));
                        }
                    }
                    else
                    {
                        throw new ApplicationException("La SUNAT no devolvió correctamente el comprobante de recepción. Verifique en el sitio web de la SUNAT.");
                    }
                }
                else
                {
                    throw new ApplicationException(string.Concat("La SUNAT no pudo procesar el comprobante. Intente más tarde. ", rpta.CodigoRespuesta, " ", rpta.MensajeError, Environment.NewLine, rpta.MensajeRespuesta));
                }
            }
        }
        private async void CrearBajas()
        {
            try
            {
                if (string.IsNullOrEmpty(vFechaXml))
                {
                    throw new InvalidOperationException("La Serie y el Correlativo no pueden estar vacíos");
                }

                var    tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(vArchivoXML));
                String vRutaCertificado = Convert.ToString(DtEmpresa.Rows[0]["CarpetaCertificadoDigital"]) +
                                          Convert.ToString(DtEmpresa.Rows[0]["NombreCertificadoDigital"]);

                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(vRutaCertificado)),
                    PasswordCertificado = Convert.ToString(DtEmpresa.Rows[0]["PasswCertificadoDigital"]),
                    UnSoloNodoExtension = true
                };

                var jsonFirmado = await _client.PostAsJsonAsync("api/Firmar", firmadoRequest);

                var respuestaFirmado = await jsonFirmado.Content.ReadAsAsync <FirmadoResponse>();

                File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                ReemplaCaracteres(Convert.ToString(vArchivoXML));

                if (!respuestaFirmado.Exito)
                {
                    throw new ApplicationException(respuestaFirmado.MensajeError);
                }

                var TramaXML = Convert.ToBase64String(File.ReadAllBytes(vArchivoXML));

                var enviarDocumentoRequest = new EnviarDocumentoRequest
                {
                    UsuarioSol      = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]),
                    ClaveSol        = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]),
                    EndPointUrl     = vUrlSunat,
                    IdDocumento     = vFechaXml,
                    TipoDocumento   = vTipoDoc,
                    TramaXmlFirmado = TramaXML
                };

                var apiMetodo          = "api/EnviarResumen";
                var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest);

                RespuestaComunConArchivo respuestaEnvio;
                respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>();

                var rpta = (EnviarResumenResponse)respuestaEnvio;
                txtResult.Text = txtResult.Text + "\n" + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}{Environment.NewLine}";

                if (!respuestaEnvio.Exito)
                {
                    throw new ApplicationException(respuestaEnvio.MensajeError);
                }

                if (!string.IsNullOrEmpty(rpta.NroTicket))
                {
                    ActualizaNroTicket();
                }

                if (chkVoz.Checked)
                {
                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = txtResult.Text + Environment.NewLine + ex.Message;
                if (chkVoz.Checked)
                {
                    Hablar();
                }
            }
        }
        private async void CrearFacturas(DataTable DtDocumentos, int ii)
        {
            string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]);

            vTipoDoc = Convert.ToString(DtDocumentos.Rows[ii]["DocumentoID"]);

            vArchivoXML1 = TxtRuc.Text + "-" + vTipoDoc + "-" + idDoc;
            vArchivoXML1 = Path.Combine(vRutaXml, $"{vArchivoXML1}");
            vArchivoXML1 = vArchivoXML1 + ".xml";


            try
            {
                var TramaXML = Convert.ToBase64String(File.ReadAllBytes(vArchivoXML1));

                var enviarDocumentoRequest = new EnviarDocumentoRequest();

                enviarDocumentoRequest.Ruc           = TxtRuc.Text;
                enviarDocumentoRequest.UsuarioSol    = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]);
                enviarDocumentoRequest.ClaveSol      = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]);
                enviarDocumentoRequest.EndPointUrl   = vUrlSunat;
                enviarDocumentoRequest.IdDocumento   = idDoc;
                enviarDocumentoRequest.TipoDocumento = vTipoDoc;
                //   TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
                enviarDocumentoRequest.TramaXmlFirmado = TramaXML;


                var apiMetodo          = "api/EnviarDocumento";
                var jsonEnvioDocumento = await _client.PostAsJsonAsync(apiMetodo, enviarDocumentoRequest);

                RespuestaComunConArchivo respuestaEnvio;
                if (!rbResumen.Checked)
                {
                    respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarDocumentoResponse>();

                    var rpta = (EnviarDocumentoResponse)respuestaEnvio;
                    txtResult.Text = txtResult.Text + idDoc + " " + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}{Environment.NewLine}";
                    try
                    {
                        if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr))
                        {
                            vArchivoCDR1 = "R-" + $"{respuestaEnvio.NombreArchivo}";
                            vArchivoCDR1 = Path.Combine(vRutaCdr, $"{vArchivoCDR1}.zip");

                            File.WriteAllBytes(vArchivoCDR1, Convert.FromBase64String(rpta.TramaZipCdr));
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    respuestaEnvio = await jsonEnvioDocumento.Content.ReadAsAsync <EnviarResumenResponse>();

                    var rpta = (EnviarResumenResponse)respuestaEnvio;
                    txtResult.Text += $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.NroTicket}{Environment.NewLine}";
                }

                if (!respuestaEnvio.Exito)
                {
                    throw new ApplicationException(respuestaEnvio.MensajeError);
                }

                // if (chkVoz.Checked)
                //   Hablar();
            }
            catch (Exception ex)
            {
                txtResult.Text = txtResult.Text + ex.Message + Environment.NewLine;
                // if (chkVoz.Checked)
                //   Hablar();
            }
        }
Esempio n. 12
0
        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;
        }