public FirmadoResponse Post([FromBody] FirmadoRequest request)
        {
            var response = new FirmadoResponse();

            try
            {
                var serializador = new Serializador
                {
                    RutaCertificadoDigital = request.CertificadoDigital,
                    PasswordCertificado    = request.PasswordCertificado,
                    TipoDocumento          = request.UnSoloNodoExtension ? 0 : 1
                };

                response.TramaXmlFirmado = serializador.FirmarXml(request.TramaXmlSinFirma);
                response.ResumenFirma    = serializador.DigestValue;
                response.ValorFirma      = serializador.ValorFirma;
                response.Exito           = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
Ejemplo n.º 2
0
        private async void Ejecutar_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;

            //20186C16-C1DC-4717-8F46-407447D225BC  =   5
            //E6360E58-8BD6-4F80-B65B-8B2098760287  =   6

            var response = new DocumentoResponse();
            //try
            //{
            // Generar xml y serializar
            FacturaXml   facturaXml   = new FacturaXml();
            Serializador serializador = new Serializador();

            //var invoice = facturaXml.metodoTemp(documento);
            //response.TramaXmlSinFirma = serializador.GenerateSimpleXML(invoice);
            response.Exito = true;

            string xmlTextoPlano = Encoding.UTF8.GetString(Convert.FromBase64String(response.TramaXmlSinFirma));     // Para pruebas

            // Certificado
            rutaCertificado = "D:\\certificado\\Certificado-NuevoProveedor\\Wnl2U2wyVk01S2wyMzgzQQ%3d%3d.pfx";
            passCertificado = "53P4xfFC8sSeFRmt";

            var firmadoRequest = new FirmadoRequest
            {
                TramaXmlSinFirma    = response.TramaXmlSinFirma,
                CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)),
                PasswordCertificado = passCertificado,
                UnSoloNodoExtension = false
            };



            EnviarDocumentoRequest enviarDocumentoRequest = new EnviarDocumentoRequest()
            {
                Ruc           = "1073580496",
                UsuarioSol    = "MODDATOS",
                ClaveSol      = "MODDATOS",
                EndPointUrl   = "https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService",
                IdDocumento   = "F001-00000001",
                TipoDocumento = "01",
                //TramaXmlFirmado = documentoFirmado.TramaXmlFirmado
            };

            var jsonEnvioDocumento = await PostSimple(enviarDocumentoRequest);


            string waiiiit = string.Empty;
            //}
            //catch (Exception ex)
            //{
            //    response.MensajeError = ex.Message;
            //    response.Pila = ex.StackTrace;
            //    response.Exito = false;
            //}
        }
Ejemplo n.º 3
0
        public static FirmadoRequest ToSignedModel(CertificadoDigitalModel certificado, string xmlSinFirma, bool node)
        {
            FirmadoRequest model = new FirmadoRequest();

            model.CertificadoDigital  = certificado.CertificadoDigital;
            model.PasswordCertificado = certificado.ClaveCertificado;
            model.TramaXmlSinFirma    = xmlSinFirma;
            model.UnSoloNodoExtension = node;
            return(model);
        }
        public async Task <EnviarResumenResponse> Generar(string organization, ComunicacionBaja model)
        {
            EmpresaModel empresa = await _repositoryempresa.Get(organization);

            model.IdDocumento     = string.Format("RA-{0:yyyyMMdd}-001", DateTime.Today);
            model.FechaEmision    = DateTime.Today.ToString(FormatoFecha);
            model.FechaReferencia = DateTime.Today.AddDays(-1).ToString(FormatoFecha);
            model.Emisor          = HelperTo.ToEmisor(empresa);

            IEstructuraXml summary     = _documentoXml.Generar(model);
            string         XmlSinFirma = await _serializador.GenerarXml(summary);

            CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization);

            FirmadoRequest  firmado       = HelperTo.ToSignedModel(certificado, XmlSinFirma, true);
            FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado);

            ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa);

            EnviarDocumentoRequest request = HelperTo.ToSendVoidedDocument(model, parametro, responseFirma);

            File.WriteAllBytes("voided.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

            EnviarResumenResponse response = new EnviarResumenResponse();
            var nombreArchivo = $"{request.Ruc}-{request.IdDocumento}";
            var tramaZip      = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo);

            _servicioSunatDocumentos.Inicializar(new ParametrosConexion
            {
                Ruc         = request.Ruc,
                UserName    = request.UsuarioSol,
                Password    = request.ClaveSol,
                EndPointUrl = request.EndPointUrl
            });

            RespuestaAsincrono resultado = _servicioSunatDocumentos.EnviarResumen(new DocumentoSunat
            {
                NombreArchivo = $"{nombreArchivo}.zip",
                TramaXml      = tramaZip
            });

            if (resultado.Exito)
            {
                response.NroTicket     = resultado.NumeroTicket;
                response.Exito         = true;
                response.NombreArchivo = nombreArchivo;
            }
            else
            {
                response.MensajeError = resultado.MensajeError;
                response.Exito        = false;
            }
            //guardar la respuesta
            return(response);
        }
Ejemplo n.º 5
0
        public async Task <EnviarDocumentoResponse> Generar(string organization, DocumentoElectronico model)
        {
            EmpresaModel empresa = await _repositoryempresa.Get(organization);

            model.Emisor = HelperTo.ToEmisor(empresa);
            IEstructuraXml invoice     = _documentoXml.Generar(model);
            string         XmlSinFirma = await _serializador.GenerarXml(invoice);

            CertificadoDigitalModel certificado = await _repositorycert.GetCertificate(organization);

            FirmadoRequest  firmado       = HelperTo.ToSignedModel(certificado, XmlSinFirma, false);
            FirmadoResponse responseFirma = await _certificador.FirmarXml(firmado);

            ParametroEmpresaModel parametro = await _repositoryparam.GetConfiguration(certificado.Empresa);

            EnviarDocumentoRequest request = HelperTo.ToSendDocument(model, parametro, responseFirma);

            File.WriteAllBytes("invoice.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

            EnviarDocumentoResponse response = new EnviarDocumentoResponse();
            var nombreArchivo = $"{request.Ruc}-{request.TipoDocumento}-{request.IdDocumento}";
            var tramaZip      = await _serializador.GenerarZip(request.TramaXmlFirmado, nombreArchivo);

            _servicioSunatDocumentos.Inicializar(new ParametrosConexion
            {
                Ruc         = request.Ruc,
                UserName    = request.UsuarioSol,
                Password    = request.ClaveSol,
                EndPointUrl = request.EndPointUrl
            });

            RespuestaSincrono resultado = _servicioSunatDocumentos.EnviarDocumento(new DocumentoSunat
            {
                TramaXml      = tramaZip,
                NombreArchivo = $"{nombreArchivo}.zip"
            });

            if (!resultado.Exito)
            {
                response.Exito        = false;
                response.MensajeError = resultado.MensajeError;
            }
            else
            {
                response = await _serializador.GenerarDocumentoRespuesta(resultado.ConstanciaDeRecepcion);

                File.WriteAllBytes("cdr_invoice.zip", Convert.FromBase64String(response.TramaZipCdr));
                // Quitamos la R y la extensión devueltas por el Servicio.
                response.NombreArchivo = nombreArchivo;
            }
            //guardar la respuesta
            return(response);
        }
Ejemplo n.º 6
0
        private async void BtnFirmar_Click(object sender, EventArgs e)
        {
            try
            {
                //_documento.IdDocumento = "F001-00000001"; //Probar

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

                var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); //Original
                //var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\XML_SF\F001-00000001.xml"));

                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(@"E:\Certificado_Luna_Verde.pfx")), //@"E:\Valle\certificado\CertificadoPFX.pfx"
                    PasswordCertificado = "pXnC3uUsdf7852Rz",
                    UnSoloNodoExtension = false                                                                        //rbRetenciones.Checked || rbResumen.Checked
                };

                ICertificador certificador     = new Certificador();
                var           respuestaFirmado = await new Firmar(certificador).Post(firmadoRequest);
                _documento.ResumenFirma = respuestaFirmado.ResumenFirma; //Firma para ser usada en el PDF si es necesario
                _documento.FirmaDigital = respuestaFirmado.ValorFirma;   // No olvidar agregar las referencias iTextSharp para generar los PDF y las firmas

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


                RutaArchivo = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                           $"{_documento.Emisor.NroDocumento+"-"+_documento.IdDocumento}.xml");

                File.WriteAllBytes(RutaArchivo, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 7
0
        private async void BtnFirmar_Click(object sender, EventArgs e)
        {
            try
            {
                //_documento.IdDocumento = "F001-00000001"; //Probar

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

                var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo)); //Original
                //var tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\XML_SF\F001-00000001.xml"));

                var firmadoRequest = new FirmadoRequest
                {
                    TramaXmlSinFirma    = tramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(@"D:\Valle\certificado\cervallespot.pfx")),
                    PasswordCertificado = "#1DEFRDE32W",
                    UnSoloNodoExtension = false //rbRetenciones.Checked || rbResumen.Checked
                };

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

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


                RutaArchivo = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                           $"CF_{_documento.IdDocumento}.xml");

                File.WriteAllBytes(RutaArchivo, Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 8
0
        public FirmadoRequest Data(int IdEmisor, string tramaXmlSinFirma)
        {
            Data_AccesosSunat data_AccesosSunat = new Data_AccesosSunat(IdEmisor);

            data_AccesosSunat.Read_AccesosSunat();

            string certificado = Convert.ToBase64String(File.ReadAllBytes(data_AccesosSunat.CertificadoDigital));

            var firmadoRequest = new FirmadoRequest()
            {
                TramaXmlSinFirma    = tramaXmlSinFirma,
                CertificadoDigital  = certificado,
                PasswordCertificado = data_AccesosSunat.ClaveCertificado,
                UnSoloNodoExtension = true
            };

            return(firmadoRequest);
        }
Ejemplo n.º 9
0
        public FirmadoResponse Post(FirmadoRequest request, bool sincrono)
        {
            var response = new FirmadoResponse();

            try
            {
                response       = _certificador.FirmarXml(request, sincrono);
                response.Exito = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
Ejemplo n.º 10
0
        public async Task <FirmadoResponse> Post([FromBody] FirmadoRequest request)
        {
            var response = new FirmadoResponse();

            try
            {
                response = await _certificador.FirmarXml(request);

                response.Exito = true;
            }
            catch (Exception ex)
            {
                response.MensajeError = ex.Message;
                response.Pila         = ex.StackTrace;
                response.Exito        = false;
            }

            return(response);
        }
        private void BtnFirmar_OnClick(object sender, RoutedEventArgs e)
        {
            TxtResultado.Text = "Firmando XML...";

            var resourceStream = Application.GetResourceStream(new Uri("certificado.pfx", UriKind.Relative));
            var arrayBytes     = new byte[resourceStream.Stream.Length];

            resourceStream.Stream.Read(arrayBytes, 0, arrayBytes.Length);
            var content = Convert.ToBase64String(arrayBytes);

            // Firmado del Documento.
            var firmado = new FirmadoRequest
            {
                TramaXmlSinFirma    = _documentoResponse.TramaXmlSinFirma,
                CertificadoDigital  = content,
                PasswordCertificado = string.Empty,
                UnSoloNodoExtension = false
            };

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

            requestFirma.AddBody(firmado);

            _client.ExecuteAsync <FirmadoResponse>(requestFirma, response =>
            {
                _responseFirma = response.Data;

                Dispatcher.BeginInvoke(() =>
                {
                    TxtResultado.Text = _responseFirma.Exito ?
                                        "XML Firmado" : _responseFirma.MensajeError;
                    BtnEnviar.IsEnabled = _responseFirma.Exito;
                });
            });
        }
Ejemplo n.º 12
0
        private static void CrearDocumentoPercepcion()
        {
            try
            {
                Console.WriteLine("Ejemplo de Percepción");
                var documento = new DocumentoPercepcion
                {
                    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 = "P001-123",
                    FechaEmision = DateTime.Today.ToString(FormatoFecha),
                    Moneda = "PEN",
                    RegimenPercepcion = "01",
                    TasaPercepcion = 2,
                    ImporteTotalPercibido = 200,
                    ImporteTotalCobrado = 10000,
                    Observaciones = "Emision de Facturas del periodo Dic. 2016",
                    DocumentosRelacionados = new List<ItemPercepcion>
                    {
                        new ItemPercepcion
                        {
                            NroDocumento = "E001-457",
                            TipoDocumento = "01",
                            MonedaDocumentoRelacionado = "USD",
                            FechaEmision = DateTime.Today.AddDays(-3).ToString(FormatoFecha),
                            ImporteTotal = 10000,
                            FechaPago = DateTime.Today.ToString(FormatoFecha),
                            NumeroPago = 153,
                            ImporteSinPercepcion = 9800,
                            ImportePercibido = 200,
                            FechaPercepcion = DateTime.Today.ToString(FormatoFecha),
                            ImporteTotalNeto = 10000,
                            TipoCambio = 3.41m,
                            FechaTipoCambio = DateTime.Today.ToString(FormatoFecha)
                        }
                    }
                };

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

                var documentoResponse = RestHelper<DocumentoPercepcion, DocumentoResponse>.Execute("GenerarPercepcion", documento);

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

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

                var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado);

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

                File.WriteAllBytes("percepcion.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

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

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

                var responseSendBill = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", sendBill);

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

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(responseSendBill.MensajeRespuesta);

                File.WriteAllBytes("percepcioncdr.zip", Convert.FromBase64String(responseSendBill.TramaZipCdr));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Ejemplo n.º 13
0
        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 documentoResponse = RestHelper<DocumentoElectronico, DocumentoResponse>.Execute("GenerarFactura", documento);

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

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

                var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado);

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

                File.WriteAllBytes("factura.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

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

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

                var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", documentoRequest);

                if (!enviarDocumentoResponse.Exito)
                {
                    throw new InvalidOperationException(enviarDocumentoResponse.MensajeError);
                }

                File.WriteAllBytes("facturacdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr));

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Ejemplo n.º 14
0
        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>()
                };

                // En las comunicaciones de Baja ya no se pueden colocar boletas, ya que la anulacion de las mismas
                // la realiza el resumen diario.
                documentoBaja.Bajas.Add(new DocumentoBaja
                {
                    Id = 1,
                    Correlativo = "33386",
                    TipoDocumento = "01",
                    Serie = "FA50",
                    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 documentoResponse = RestHelper<ComunicacionBaja, DocumentoResponse>.Execute("GenerarComunicacionBaja", documentoBaja);
                if (!documentoResponse.Exito)
                {
                    throw new InvalidOperationException(documentoResponse.MensajeError);
                }

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

                var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado);

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

                Console.WriteLine("Guardando XML de la Comunicacion de Baja....(Revisar carpeta del ejecutable)");

                File.WriteAllBytes("comunicacionbaja.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

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

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

                var enviarResumenResponse = RestHelper<EnviarDocumentoRequest, EnviarResumenResponse>.Execute("EnviarResumen", sendBill);

                if (!enviarResumenResponse.Exito)
                {
                    throw new InvalidOperationException(enviarResumenResponse.MensajeError);
                }

                Console.WriteLine("Nro de Ticket: {0}", enviarResumenResponse.NroTicket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Ejemplo n.º 15
0
        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, // 1 - Agregar. 2 - Modificar. 3 - Eliminar
                    Moneda = "PEN",
                    TotalVenta = 190.9m,
                    TotalIgv = 29.12m,
                    Gravadas = 161.78m,
                });
                // Para los casos de envio de boletas anuladas, se debe primero informar las boletas creadas (1) y luego en un segundo resumen se envian las anuladas. De lo contrario se presentará el error 'El documento indicado no existe no puede ser modificado/eliminado'
                documentoResumenDiario.Resumenes.Add(new GrupoResumenNuevo
                {
                    Id = 2,
                    TipoDocumento = "03",
                    IdDocumento = "BB30-33384",
                    NroDocumentoReceptor = "08506678",
                    TipoDocumentoReceptor = "1",
                    CodigoEstadoItem = 1, // 1 - Agregar. 2 - Modificar. 3 - Eliminar
                    Moneda = "USD",
                    TotalVenta = 9580m,
                    TotalIgv = 1411.36m,
                    Gravadas = 8168.64m,
                });


                Console.WriteLine("Generando XML....");
                
                var documentoResponse = RestHelper<ResumenDiarioNuevo, DocumentoResponse>.Execute("GenerarResumenDiario/v2", documentoResumenDiario);

                if (!documentoResponse.Exito)
                    throw new InvalidOperationException(documentoResponse.MensajeError);

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

                var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado);

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

                Console.WriteLine("Guardando XML de Resumen....(Revisar carpeta del ejecutable)");

                File.WriteAllBytes("resumendiario.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

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

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

                var enviarResumenResponse = RestHelper<EnviarDocumentoRequest, EnviarResumenResponse>.Execute("EnviarResumen", enviarDocumentoRequest);

                if (!enviarResumenResponse.Exito)
                {
                    throw new InvalidOperationException(enviarResumenResponse.MensajeError);
                }

                Console.WriteLine("Nro de Ticket: {0}", enviarResumenResponse.NroTicket);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Ejemplo n.º 16
0
        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();
            }
        }
Ejemplo n.º 17
0
        async Task <FirmadoResponse> ICertificador.FirmarXml(FirmadoRequest request)
        {
            var task = Task.Factory.StartNew(() =>
            {
                var response = new FirmadoResponse();

                var certificate = new X509Certificate2();
                certificate.Import(Convert.FromBase64String(request.CertificadoDigital), request.PasswordCertificado, X509KeyStorageFlags.MachineKeySet);

                var xmlDoc = new XmlDocument();

                string resultado;

                var betterBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(Formatos.EncodingIso),
                                                   Convert.FromBase64String(request.TramaXmlSinFirma));

                using (var documento = new MemoryStream(betterBytes))
                {
                    xmlDoc.PreserveWhitespace = false;
                    xmlDoc.Load(documento);

                    var indiceNodo = request.UnSoloNodoExtension ?   0   :   1;

                    var nodoExtension = xmlDoc.GetElementsByTagName("ExtensionContent", EspacioNombres.ext).Item(indiceNodo);

                    if (nodoExtension == null)
                    {
                        throw new InvalidOperationException("No se pudo encontrar el nodo ExtensionContent en el XML");
                    }
                    nodoExtension.RemoveAll();

                    // Creamos el objeto SignedXml.
                    var signedXml = new SignedXml(xmlDoc)
                    {
                        SigningKey = certificate.PrivateKey
                    };
                    var xmlSignature = signedXml.Signature;

                    var env = new XmlDsigEnvelopedSignatureTransform();

                    var reference = new Reference(string.Empty);
                    reference.AddTransform(env);
                    xmlSignature.SignedInfo.AddReference(reference);

                    var keyInfo  = new KeyInfo();
                    var x509Data = new KeyInfoX509Data(certificate);

                    x509Data.AddSubjectName(certificate.Subject);

                    keyInfo.AddClause(x509Data);
                    xmlSignature.KeyInfo = keyInfo;
                    xmlSignature.Id      = "SignatureSP";
                    signedXml.ComputeSignature();

                    // Recuperamos el valor Hash de la firma para este documento.
                    if (reference.DigestValue != null)
                    {
                        response.ResumenFirma = Convert.ToBase64String(reference.DigestValue);
                    }

                    response.ValorFirma = Convert.ToBase64String(signedXml.SignatureValue);

                    nodoExtension.AppendChild(signedXml.GetXml());

                    using (var memDoc = new MemoryStream())
                    {
                        using (var writer = XmlWriter.Create(memDoc, new XmlWriterSettings {
                            Encoding = Encoding.GetEncoding(Formatos.EncodingIso)
                        }))
                        {
                            xmlDoc.WriteTo(writer);
                        }
                        resultado = Convert.ToBase64String(memDoc.ToArray());
                    }
                }
                response.TramaXmlFirmado = resultado;

                return(response);
            });

            return(await task);
        }
        public static string ImprimirComprobanteAntes(string numeroDocumento, string tipoDocumentoId, string serie, string correlativo, string fechaEmision, decimal montoTotal)
        {
            var mensaje = String.Empty;

            try
            {
                var fecha = DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

                // var ventaInfoLista = new Negocio.VentaPetroamerica().ListarPaginado(0, numeroDocumento.Trim(), tipoDocumentoId, serie, correlativo, fecha, fecha, 0, 0, String.Empty, 0, 0);
                var ventaInfoLista = new Negocio.VentaGasolutions().ListarPaginado(0, String.Empty, tipoDocumentoId, serie + "-" + correlativo, fecha, fecha, 0, 0, 0, 0);
                var ventaGasolutionsDetalleInfo = new VentaDetalleGasolutionsInfo();

                ventaInfoLista = ventaInfoLista.Where(v => v.TotalVenta.Equals(montoTotal)).ToList();
                var ventaInfo = new VentaGasolutionsInfo();
                if (ventaInfoLista.Count > 0)
                {
                    ventaInfo = ventaInfoLista.FirstOrDefault();
                    ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0).FirstOrDefault();
                }
                else
                {
                    mensaje = "No se ha encontrado el comprobante." + "@" + "" + "@" + ventaInfo.NroDocumentoReceptor;
                    return(mensaje);
                }

                var ventaDetalleInfo = new List <VentaDetalleInfo>();

                _documento = new DocumentoElectronico();

                #region Documento
                _documento.CalculoDetraccion = 0;
                _documento.CalculoIgv        = Decimal.Divide(18, 100);
                _documento.CalculoIsc        = 0;
                _documento.DescuentoGlobal   = 0;

                #region Emisor
                var emisor = new DocumentoElectronico().Emisor;
                emisor.Departamento    = ventaInfo.DepartamentoEmisor;
                emisor.Direccion       = ventaInfo.DireccionEmisor;
                emisor.Distrito        = ventaInfo.DistritoEmisor;
                emisor.NombreComercial = ventaInfo.NombreComercialEmisor;
                emisor.NombreLegal     = ventaInfo.NombreLegalEmisor;
                emisor.NroDocumento    = ventaInfo.NroDocumentoEmisor;
                emisor.Provincia       = ventaInfo.ProvinciaEmisor;
                emisor.TipoDocumento   = "6";
                emisor.Ubigeo          = ventaInfo.UbigeoEmisor;
                emisor.Urbanizacion    = "";
                _documento.Emisor      = emisor;
                #endregion

                _documento.Exoneradas   = 0;
                _documento.FechaEmision = ventaInfo.FechaEmision.ToString("dd/MM/yyyy");
                _documento.Gratuitas    = 0;
                _documento.Gravadas     = ventaInfo.Gravadas;
                _documento.IdDocumento  = ventaInfo.IdDocumento;
                _documento.Inafectas    = 0;

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

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

                _documento.Moneda          = ventaInfo.MonedaId.Equals(Constantes.MonedaSoles) ? Constantes.MonedaSolesSunat : Constantes.MonedaDolaresSunat;
                _documento.MontoAnticipo   = 0;
                _documento.MontoDetraccion = 0;
                _documento.MontoEnLetras   = Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta);
                _documento.MontoPercepcion = 0;
                _documento.PlacaVehiculo   = ventaInfo.PlacaVehiculo;

                #region Receptor
                var receptor = new DocumentoElectronico().Receptor;
                receptor.Departamento    = "";
                receptor.Direccion       = ventaInfo.DireccionReceptor;
                receptor.Distrito        = "";
                receptor.NombreComercial = ventaInfo.NombreComercialReceptor;
                receptor.NombreLegal     = ventaInfo.NombreLegalReceptor;
                receptor.NroDocumento    = ventaInfo.NroDocumentoReceptor;
                receptor.Provincia       = "";
                receptor.TipoDocumento   = ventaInfo.TipoDocumentoReceptor;
                receptor.Ubigeo          = "";
                receptor.Urbanizacion    = "";
                _documento.Receptor      = receptor;
                #endregion

                _documento.TipoDocumento      = ventaInfo.TipoDocumento;
                _documento.TotalIgv           = ventaInfo.TotalIgv;
                _documento.TotalIsc           = 0;
                _documento.TotalOtrosTributos = 0;
                _documento.TotalVenta         = ventaInfo.TotalVenta;
                #endregion

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

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

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

                var rutaPdfFactura = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "");

                #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 = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente");
                if (!Directory.Exists(rutaXml))
                {
                    Directory.CreateDirectory(rutaXml);
                }
                File.WriteAllBytes(rutaXml + "/" + _documento.IdDocumento + ".xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma));
                #endregion

                #region Firma
                string rutaCertificado = HostingEnvironment.MapPath("~/Archivos/Facturacion/certificado.pfx");
                var    firmado         = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)),
                    PasswordCertificado = "9dGxdmm5JHKwKsXc",
                    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/Cliente/" + _documento.IdDocumento + "_Firmado.xml");
                string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Facturacion/XML/Cliente");
                if (!Directory.Exists(rutaXmlFirmado))
                {
                    Directory.CreateDirectory(rutaXmlFirmado);
                }
                File.WriteAllBytes(rutaXmlFirmado + "/" + _documento.IdDocumento + "_Firmado.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));
                #endregion

                #region Impresión Comprobante
                var htmlToComprobante        = new NReco.PdfGenerator.HtmlToPdfConverter();
                var nombreArchivoComprobante = String.Empty;
                var comprobanteSB            = new StringBuilder();

                if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteFactura))
                {
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/FacturaJulcan.html"));
                    #region Factura
                    //comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath("~/Imagenes/petroamerica_logo.png"));
                    comprobanteSB.Replace("@EMPRESA_LOGO", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor);
                    comprobanteSB.Replace("@GRIFO_DIRECCION", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor);
                    comprobanteSB.Replace("@IMPRESORA", String.Empty);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento);
                    comprobanteSB.Replace("@FECHA", fechaEmision);
                    comprobanteSB.Replace("@FECHA", fechaEmision);

                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor);
                    comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor);
                    comprobanteSB.Replace("@CLIENTE_PLACA", ventaInfo.PlacaVehiculo);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor);
                    comprobanteSB.Replace("@CANTIDAD", ventaGasolutionsDetalleInfo.Cantidad.ToString("N2"));
                    comprobanteSB.Replace("@PRECIO", ventaGasolutionsDetalleInfo.PrecioUnitario.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.Gravadas.ToString("N2"));
                    comprobanteSB.Replace("@PRODUCTO", ventaGasolutionsDetalleInfo.Descripcion);
                    comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda);
                    comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.TotalIgv.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2"));
                    comprobanteSB.Replace("@VENDEDOR", String.Empty);
                    comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma);

                    comprobanteSB.Replace("@TEXTO_MONTO_TOTAL", NumeroALetras.numeroAletras(ventaInfo.TotalVenta));
                    #endregion

                    nombreArchivoComprobante = "Factura_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf";
                }
                if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteBoletaVenta))
                {
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/BoletaJulcan.html"));
                    #region Boleta
                    //comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath("~/Imagenes/petroamerica_logo.png"));
                    comprobanteSB.Replace("@EMPRESA_LOGO", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor);
                    comprobanteSB.Replace("@GRIFO_DIRECCION", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor);
                    comprobanteSB.Replace("@IMPRESORA", String.Empty);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento);
                    comprobanteSB.Replace("@FECHA", fechaEmision);
                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor);
                    comprobanteSB.Replace("@CANTIDAD", ventaGasolutionsDetalleInfo.Cantidad.ToString("N2"));
                    comprobanteSB.Replace("@PRECIO", ventaGasolutionsDetalleInfo.PrecioUnitario.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.Gravadas.ToString("N2"));
                    comprobanteSB.Replace("@PRODUCTO", ventaGasolutionsDetalleInfo.Descripcion);
                    comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda);
                    comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.TotalIgv.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2"));
                    comprobanteSB.Replace("@VENDEDOR", String.Empty);
                    comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma);

                    comprobanteSB.Replace("@TEXTO_MONTO_TOTAL", NumeroALetras.numeroAletras(ventaInfo.TotalVenta));
                    #endregion

                    nombreArchivoComprobante = "Boleta_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf";
                }

                if (!Directory.Exists(rutaPdfFactura))
                {
                    Directory.CreateDirectory(rutaPdfFactura);
                }

                #region Codigo QR
                var codigoQR = ventaInfo.NroDocumentoReceptor + "|" + ventaInfo.TipoDocumento + "|" + ventaInfo.IdDocumento.Substring(0, 4) + "|" +
                               ventaInfo.IdDocumento.Substring(5, 8) + "|" + ventaInfo.TotalIgv + "|" + ventaInfo.TotalVenta + "|" +
                               ventaInfo.FechaEmision + "|" + ventaInfo.TipoDocumentoReceptor + "|" + ventaInfo.NroDocumentoReceptor + "|" +
                               responseFirma.Data.ResumenFirma + "|" + responseFirma.Data.ValorFirma;

                // instantiate a writer object
                var barcodeWriter = new ZXing.BarcodeWriter();
                // set the barcode format
                barcodeWriter.Format = BarcodeFormat.PDF_417;
                // write text and generate a 2-D barcode as a bitmap
                // barcodeWriter.Write(codigoQR).Save(@"C:\Users\jeremy\Desktop\generated.bmp");
                //barcodeWriter.Write(codigoQR).Save(HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NumeroDocumentoCliente + "/" + _documento.IdDocumento + ".bmp"));
                barcodeWriter.Write(codigoQR).Save(rutaPdfFactura + "/" + _documento.IdDocumento + ".bmp");
                #endregion

                comprobanteSB.Replace("@CODIGO_QR", HttpContext.Current.Server.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "/" + _documento.IdDocumento + ".bmp"));


                comprobanteSB = Herramientas.Helper.EncodeHtml(comprobanteSB);
                //var margins = new PageMargins();
                //margins.Left = 1;
                //htmlToComprobante.Margins = margins;

                var pdfBytesFactura = htmlToComprobante.GeneratePdf(comprobanteSB.ToString());


                // var comprobanteImpreso = rutaPdfFactura + "\\" + nombreArchivoComprobante + ".pdf";
                File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".pdf", pdfBytesFactura);
                File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));
                #endregion

                mensaje = "El Comprobante se generó correctamente" + "@" + nombreArchivoComprobante + "@" + ventaInfo.NroDocumentoReceptor;
            }
            catch (Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaPresentacion);
                mensaje = rethrow ? ex.Message : Constantes.ExcepcionPoliticaPresentacion;
                // var sex = new SmartException(ex, usuarioInfo.Matricula, codigoOperacion.ToString());
                //RegistrarScript("MostrarMensaje('" + mensaje.Replace("'", "") + "');", "ErrorConsultaComprobante");
                mensaje = (mensaje + "-" + ex.Source) + "@" + "" + "@" + numeroDocumento;
            }
            return(mensaje);
        }
Ejemplo n.º 19
0
        static void Main(string[] args)
        {
            Console.WriteLine("Prueba de API REST de OpenInvoicePeru (C#)");

            try
            {
                var documento = new DocumentoElectronico
                {
                    Emisor = new Contribuyente
                    {
                        NroDocumento    = "20100070970",
                        TipoDocumento   = "6",
                        Direccion       = "CAL.MORELLI NRO. 181 INT. P-2",
                        Urbanizacion    = "-",
                        Departamento    = "LIMA",
                        Provincia       = "LIMA",
                        Distrito        = "SAN BORJA",
                        NombreComercial = "PLAZA VEA",
                        NombreLegal     = "SUPERMERCADOS PERUANOS SOCIEDAD ANONIMA"
                    },
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = "20100039207",
                        TipoDocumento = "6",
                        NombreLegal   = "RANSA COMERCIAL S.A."
                    },
                    IdDocumento       = "FF11-001",
                    FechaEmision      = DateTime.Today.AddDays(-5).ToString("yyyy-MM-dd"),
                    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     = "https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService",
                    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();
            }
        }
Ejemplo n.º 20
0
        private async void CrearXmlFacturas(int ii)
        {
            try
            {
                string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" +
                                                DtDocumentos.Rows[ii]["NumeroDocumento"]);
                string vletras = Convert.ToString(DtDocumentos.Rows[ii]["letras"]);

                decimal vDscto         = 0;
                string  vNroDocumento  = Convert.ToString(DtDocumentos.Rows[ii]["clienteID"]);
                string  vTipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["IdentidadID"]);
                string  vNombreLegal   = Convert.ToString(DtDocumentos.Rows[ii]["ClienterazonSocial"]);


                DocumentoElectronico _xDocumento = new DocumentoElectronico
                {
                    Emisor   = CrearEmisor(DtEmpresa),
                    Receptor = new Contribuyente
                    {
                        NroDocumento  = vNroDocumento,
                        TipoDocumento = vTipoDocumento,
                        NombreLegal   = vNombreLegal,
                    },
                };
                _xDocumento.IdDocumento  = idDoc;
                _xDocumento.FechaEmision = DtpFechaDoc.Value.ToString(FormatoFecha);

                _xDocumento.Moneda             = "PEN";
                _xDocumento.MontoEnLetras      = vletras;
                _xDocumento.CalculoIgv         = 18m;
                _xDocumento.CalculoIsc         = Convert.ToDecimal(DtDocumentos.Rows[ii]["porcentajeIsc"]);
                _xDocumento.CalculoDetraccion  = 0.00m;
                _xDocumento.TipoDocumento      = Convert.ToString(DtDocumentos.Rows[ii]["documentoID"]);
                _xDocumento.TotalGravadas      = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGravado"]);
                _xDocumento.TotalInafectas     = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteinafecto"]);
                _xDocumento.TotalExoneradas    = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteexonerado"]);
                _xDocumento.TotalGratuitas     = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteGratuitas"]);
                _xDocumento.TotalOtrosTributos = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteOtros"]);
                _xDocumento.TotalIsc           = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteisc"]);
                _xDocumento.TotalIgv           = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteIgv"]);
                _xDocumento.DescuentoGlobal    = vDscto;
                _xDocumento.TotalVenta         = Convert.ToDecimal(DtDocumentos.Rows[ii]["TotalImporteventa"]);
                _xDocumento.Items = new List <DetalleDocumento>();

                // nuevo 2.1
                //          _xDocumento.PorcentajeIgv = Convert.ToDecimal(DtDocumentos.Rows[ii]["PorcentajeIgv"]);
                _xDocumento.FechaRegistro = Convert.ToString(DtDocumentos.Rows[ii]["fechaRegistro"]);
                _xDocumento.AnexoSunat    = Convert.ToString(DtDocumentos.Rows[ii]["AnexoSunat"]);
                _xDocumento.NroPedido     = Convert.ToString(DtDocumentos.Rows[ii]["pedidonumero"]);


                DtArticulos         = DetalleArticulos(DtDocumentos, ii);
                _xDocumento.TotItem = DtArticulos.Rows.Count;
                for (int i3 = 0; i3 <= DtArticulos.Rows.Count - 1; i3++)
                {
                    _xDocumento.Items.Add(DetalleItem(DtArticulos, i3));
                }

                string vTipoDoc = Convert.ToString(DtDocumentos.Rows[ii]["DocumentoID"]);
                string vNroDocumentoModifica = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]) + "-" + Convert.ToString(DtDocumentos.Rows[ii]["NumeroDocumentoModifica"]);

                if (vTipoDoc == "08")
                {
                    string vNroDocumentoModifica1 = Convert.ToString(DtDocumentos.Rows[ii]["SeriedocumentoModifica"]);
                }
                if (vTipoDoc == "07" || vTipoDoc == "08")
                {
                    // nota de credito
                    var vRelacionado = new DocumentoRelacionado
                    {
                        TipoDocumento = Convert.ToString(DtDocumentos.Rows[ii]["TipoDocumentoModifica"]),
                        NroDocumento  = vNroDocumentoModifica
                    };
                    _xDocumento.Relacionados.Add(vRelacionado);

                    // nota de debito
                    var vDiscrepancia = new Discrepancia
                    {
                        Tipo          = Convert.ToString(DtDocumentos.Rows[ii]["TipodocumentoModifica"]),
                        NroReferencia = vNroDocumentoModifica,
                        Descripcion   = Convert.ToString(DtDocumentos.Rows[ii]["DescripcionMotivoNota"])
                    };
                    _xDocumento.Discrepancias.Add(vDiscrepancia);
                }
                string _metodoApi = "";
                switch (vTipoDoc)
                {
                case "07":
                    _metodoApi = "api/GenerarNotaCredito";
                    break;

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

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

                var response = await _client.PostAsJsonAsync(_metodoApi, _xDocumento);

                var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>();

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



                idDoc       = DtEmpresa.Rows[0]["EmpresaRuc"] + "-" + vTipoDoc;
                idDoc      += "-" + Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]);
                vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml");
                //    File.WriteAllBytes(vArchivoXML, Convert.FromBase64String(respuesta.TramaXmlSinFirma));
                //    return;

                //        String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]);

                var tramaXmlSinFirma = respuesta.TramaXmlSinFirma;


                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>();

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


                vArchivoXML = Path.Combine(vRutaXml, $"{idDoc}.xml");



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

                ReemplaCaracteres(Convert.ToString(vArchivoXML));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                txtResult.Text = txtResult.Text + ex.Message + Environment.NewLine;
            }
        }
Ejemplo n.º 21
0
        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();
                }
            }
        }
Ejemplo n.º 22
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
                };

                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 && codigoTipoDoc != "09" ? "api/EnviarResumen" : "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 = $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}";
                    try
                    {
                        if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr))
                        {
                            File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}",
                                               Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                            File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}",
                                               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}";
                }

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

                if (chkVoz.Checked)
                {
                    Hablar();
                }
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 23
0
        private static void CrearDocumentoPercepcion()
        {
            try
            {
                Console.WriteLine("Ejemplo de Percepción");
                var documento = new DocumentoPercepcion
                {
                    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            = "P001-123",
                    FechaEmision           = DateTime.Today.ToString(FormatoFecha),
                    Moneda                 = "PEN",
                    RegimenPercepcion      = "01",
                    TasaPercepcion         = 2,
                    ImporteTotalPercibido  = 200,
                    ImporteTotalCobrado    = 10000,
                    Observaciones          = "Emision de Facturas del periodo Dic. 2016",
                    DocumentosRelacionados = new List <ItemPercepcion>
                    {
                        new ItemPercepcion
                        {
                            NroDocumento  = "E001-457",
                            TipoDocumento = "01",
                            MonedaDocumentoRelacionado = "USD",
                            FechaEmision         = DateTime.Today.AddDays(-3).ToString(FormatoFecha),
                            ImporteTotal         = 10000,
                            FechaPago            = DateTime.Today.ToString(FormatoFecha),
                            NumeroPago           = 153,
                            ImporteSinPercepcion = 9800,
                            ImportePercibido     = 200,
                            FechaPercepcion      = 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("GenerarPercepcion", 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("Codigo Hash: {0}", responseFirma.Data.ResumenFirma);
                File.WriteAllBytes("percepcion.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));

                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   = "40",
                    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);

                File.WriteAllBytes("cdr_percepcion.zip", Convert.FromBase64String(responseSendBill.Data.TramaZipCdr));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
    private async void CrearFacturas(int ii)
    {
        try
        {
            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;
            }

            string idDoc = Convert.ToString(DtDocumentos.Rows[ii]["Seriedocumento"] + "-" + DtDocumentos.Rows[ii]["NumeroDocumento"]);

            String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]);
            RutaArchivo = Path.Combine(vRutaXml, $"{idDoc}.xml");

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

            var    tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo));
            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 = 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             = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]),
                UsuarioSol      = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]),
                ClaveSol        = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]),
                EndPointUrl     = ValorSeleccionado(),
                IdDocumento     = idDoc,
                TipoDocumento   = codigoTipoDoc,
                TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
            };

            var apiMetodo          = rbResumen.Checked && codigoTipoDoc != "09" ? "api/EnviarResumen" : "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 + "\n" + idDoc + " " + $@"{Resources.procesoCorrecto}{Environment.NewLine}{rpta.MensajeRespuesta} siendo las {DateTime.Now}{Environment.NewLine}";
                try
                {
                    if (rpta.Exito && !string.IsNullOrEmpty(rpta.TramaZipCdr))
                    {
                        File.WriteAllBytes($"{Program.CarpetaXml}\\{respuestaEnvio.NombreArchivo}",
                                           Convert.FromBase64String(respuestaFirmado.TramaXmlFirmado));

                        File.WriteAllBytes($"{Program.CarpetaCdr}\\R-{respuestaEnvio.NombreArchivo}",
                                           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 = txtResult.Text + "\n" + $@"{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 + Environment.NewLine + ex.Message;
            if (chkVoz.Checked)
            {
                Hablar();
            }
        }
    }
    private async void CrearResumen()
    {
        try
        {
            String vRutaXml = Convert.ToString(DtEmpresa.Rows[0]["CarpetaEnviosXml"]);

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

            var    tramaXmlSinFirma = Convert.ToBase64String(File.ReadAllBytes(RutaArchivo));
            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 = rbResumen.Checked || rbRetenciones.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             = Convert.ToString(DtEmpresa.Rows[0]["EmpresaRuc"]),
                UsuarioSol      = Convert.ToString(DtEmpresa.Rows[0]["EmpresaUsuarioSol"]),
                ClaveSol        = Convert.ToString(DtEmpresa.Rows[0]["EmpresaClaveSol"]),
                EndPointUrl     = ValorSeleccionado(),
                IdDocumento     = RutaArchivo,
                TipoDocumento   = CodigoTipoDoc,
                TramaXmlFirmado = respuestaFirmado.TramaXmlFirmado
            };

            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 (chkVoz.Checked)
            {
                Hablar();
            }
        }
        catch (Exception ex)
        {
            txtResult.Text = txtResult.Text + Environment.NewLine + ex.Message;
            if (chkVoz.Checked)
            {
                Hablar();
            }
        }
    }
Ejemplo n.º 26
0
        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();
            }
        }
        //public static string ImprimirComprobante(int ventaPetroamericaId, int ventaId)
        public static string ImprimirComprobante(string numeroDocumento, string tipoDocumentoId, string serie, string correlativo, string fechaEmision, decimal montoTotalComprobante)
        {
            var mensaje = String.Empty;

            try
            {
                var empresaInfo = new Empresa().Listar(0).FirstOrDefault();
                var agenciaInfo = new Agencia().Listar(0).FirstOrDefault();
                //var ventaInfo = new Negocio.VentaGasolutions().Listar(ventaPetroamericaId).FirstOrDefault();


                var ventaInfoLista = new Negocio.VentaGasolutions().ListarPaginado(0, numeroDocumento, tipoDocumentoId, serie + "-" + correlativo, DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", null), DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", null), 0, 0, 0, 0);
                var ventaGasolutionsDetalleInfoLista = new List <VentaDetalleGasolutionsInfo>();

                //var ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaPetroamericaId, 0).ToList();
                //var ventaGasolutionsDetalleInfo = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0).ToList();

                ventaInfoLista = ventaInfoLista.Where(v => v.TotalVenta.Equals(montoTotalComprobante)).ToList();
                var ventaInfo = new VentaGasolutionsInfo();
                if (ventaInfoLista.Count > 0)
                {
                    ventaInfo = ventaInfoLista.FirstOrDefault();
                    ventaGasolutionsDetalleInfoLista = new Negocio.VentaGasolutions().ListarDetalle(ventaInfo.VentaGasolutionsId, 0);
                }
                else
                {
                    mensaje = "No se ha encontrado el comprobante." + "@" + "" + "@" + ventaInfo.NroDocumentoReceptor;
                    return(mensaje);
                }

                var ventaDetalleInfo = new List <VentaDetalleInfo>();

                _documento = new DocumentoElectronico();

                #region Documento
                _documento.CalculoDetraccion = 0;
                _documento.CalculoIgv        = Decimal.Divide(18, 100);
                _documento.CalculoIsc        = 0;
                _documento.DescuentoGlobal   = 0;

                #region Emisor
                var emisor = new DocumentoElectronico().Emisor;
                emisor.Departamento    = ventaInfo.DepartamentoEmisor;
                emisor.Direccion       = ventaInfo.DireccionEmisor;
                emisor.Distrito        = ventaInfo.DistritoEmisor;
                emisor.NombreComercial = ventaInfo.NombreComercialEmisor;
                emisor.NombreLegal     = ventaInfo.NombreLegalEmisor;
                emisor.NroDocumento    = ventaInfo.NroDocumentoEmisor;
                emisor.Provincia       = ventaInfo.ProvinciaEmisor;
                emisor.TipoDocumento   = "6";
                emisor.Ubigeo          = ventaInfo.UbigeoEmisor;
                emisor.Urbanizacion    = "";
                _documento.Emisor      = emisor;
                #endregion

                _documento.Exoneradas   = 0;
                _documento.FechaEmision = ventaInfo.FechaEmision.ToString("dd/MM/yyyy");
                _documento.Gratuitas    = 0;
                _documento.Gravadas     = ventaInfo.Gravadas;
                _documento.IdDocumento  = ventaInfo.IdDocumento;
                _documento.Inafectas    = 0;

                #region Items
                var itemId = 1;
                foreach (var vd in ventaGasolutionsDetalleInfoLista)
                {
                    var item = new DetalleDocumento();
                    item.Cantidad    = vd.Cantidad;
                    item.Descripcion = vd.Descripcion;
                    item.Id          = vd.Id;
                    itemId++;
                    item.Impuesto          = vd.Impuesto;
                    item.PrecioUnitario    = vd.PrecioUnitario;
                    item.Suma              = vd.TotalVenta;
                    item.TotalVenta        = vd.TotalVenta;
                    item.UnidadMedida      = vd.UnidadMedida;
                    item.Descuento         = 0;
                    item.ImpuestoSelectivo = 0;
                    item.OtroImpuesto      = 0;
                    item.PrecioReferencial = 0;
                    item.TipoImpuesto      = "10";
                    item.TipoPrecio        = "01";
                    _documento.Items.Add(item);
                }
                #endregion

                _documento.Moneda          = ventaInfo.MonedaId.Equals(Constantes.MonedaSoles) ? Constantes.MonedaSolesSunat : Constantes.MonedaDolaresSunat;
                _documento.MontoAnticipo   = 0;
                _documento.MontoDetraccion = 0;
                _documento.MontoEnLetras   = Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta);
                _documento.MontoPercepcion = 0;
                _documento.PlacaVehiculo   = ventaInfo.PlacaVehiculo;

                #region Receptor
                var receptor = new DocumentoElectronico().Receptor;
                receptor.Departamento    = "";
                receptor.Direccion       = ventaInfo.DireccionReceptor;
                receptor.Distrito        = "";
                receptor.NombreComercial = ventaInfo.NombreComercialReceptor;
                receptor.NombreLegal     = ventaInfo.NombreLegalReceptor;
                receptor.NroDocumento    = ventaInfo.NroDocumentoReceptor;
                receptor.Provincia       = "";
                receptor.TipoDocumento   = ventaInfo.TipoDocumentoReceptor;
                receptor.Ubigeo          = "";
                receptor.Urbanizacion    = "";
                _documento.Receptor      = receptor;
                #endregion

                _documento.TipoDocumento      = ventaInfo.TipoDocumento;
                _documento.TotalIgv           = ventaInfo.TotalIgv;
                _documento.TotalIsc           = 0;
                _documento.TotalOtrosTributos = 0;
                _documento.TotalVenta         = ventaInfo.TotalVenta;
                #endregion

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

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

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

                var rutaPdfFactura = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "");

                #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 = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente") + "/" + ventaInfo.NroDocumentoReceptor;
                if (!Directory.Exists(rutaXml))
                {
                    Directory.CreateDirectory(rutaXml);
                }
                File.WriteAllBytes(rutaXml + "/" + _documento.IdDocumento + ".xml", Convert.FromBase64String(documentoResponse.Data.TramaXmlSinFirma));
                #endregion

                #region Firma
                string rutaCertificado = HostingEnvironment.MapPath("~/Archivos/Facturacion/certificado.pfx");
                var    firmado         = new FirmadoRequest
                {
                    TramaXmlSinFirma    = documentoResponse.Data.TramaXmlSinFirma,
                    CertificadoDigital  = Convert.ToBase64String(File.ReadAllBytes(rutaCertificado)),
                    PasswordCertificado = "9dGxdmm5JHKwKsXc",
                    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/Cliente/" + _documento.IdDocumento + "_Firmado.xml");
                string rutaXmlFirmado = HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente") + "/" + ventaInfo.NroDocumentoReceptor;
                if (!Directory.Exists(rutaXmlFirmado))
                {
                    Directory.CreateDirectory(rutaXmlFirmado);
                }
                File.WriteAllBytes(rutaXmlFirmado + "/" + _documento.IdDocumento + "_Firmado.xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));
                #endregion

                #region Impresión Comprobante
                var htmlToComprobante        = new NReco.PdfGenerator.HtmlToPdfConverter();
                var nombreArchivoComprobante = String.Empty;
                var comprobanteSB            = new StringBuilder();

                if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteFactura))
                {
                    //comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/FacturaPowerGas.html"));
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto(PlantillaFactura));
                    #region Factura

                    comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath(empresaInfo.Imagen));
                    comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor);
                    comprobanteSB.Replace("@EMPRESA_TELEFONO", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_FAX", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_PAIS", empresaInfo.Pais);
                    comprobanteSB.Replace("@EMPRESA_DEPARTAMENTO", empresaInfo.Departamento);
                    comprobanteSB.Replace("@EMPRESA_PROVINCIA", empresaInfo.Provincia);
                    comprobanteSB.Replace("@EMPRESA_DISTRITO", empresaInfo.Distrito);
                    comprobanteSB.Replace("@FECHAEMISION", ventaInfo.FechaEmision.ToString("dd/MM/yyyy"));
                    comprobanteSB.Replace("@AGENCIA_DIRECCION", agenciaInfo.Direccion);


                    //var clienteInfo = new Cliente().Listar(ventaInfo.ClienteId).FirstOrDefault();
                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor);
                    comprobanteSB.Replace("@CLIENTE_DISTRITO", String.Empty);
                    comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor);
                    comprobanteSB.Replace("@CLIENTE_CODIGO", String.Empty);

                    comprobanteSB.Replace("@MONEDA", ventaInfo.Moneda);

                    var facturaSBDetalle = new StringBuilder("");
                    facturaSBDetalle.Append("<table style=\"width: 100%; border-collapse: collapse;\">");
                    facturaSBDetalle.Append("   <thead>");
                    facturaSBDetalle.Append("       <tr>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">ITEM</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 50%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">DESCRIPCI&Oacute;N</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">CANT</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">UND</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">VALOR UNIT</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">SUBTOTAL</td>");
                    facturaSBDetalle.Append("       </tr>");
                    facturaSBDetalle.Append("   </thead>");

                    var montoGravado       = 0M;
                    var montoImpuestoTotal = 0M;
                    foreach (var vd in ventaGasolutionsDetalleInfoLista)
                    {
                        facturaSBDetalle.Append("   <tr>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.CodigoItem + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 50%; border: 1px none #0b44e9; text-align: left; vertical-align: top;\" class=\"Estilo8\">" + vd.Descripcion + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + ((vd.TotalVenta - vd.Impuesto) / vd.PrecioUnitario).ToString("N2") + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.UnidadMedida + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.PrecioUnitario.ToString("N2") + "</td>");
                        //facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.Cantidad * vd.PrecioUnitario).ToString("N2") + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.TotalVenta - vd.Impuesto).ToString("N2") + "</td>");
                        facturaSBDetalle.Append("   </tr>");

                        montoGravado = montoGravado + vd.TotalVenta;
                    }
                    facturaSBDetalle.Append("</table>");

                    var montoIgv = montoGravado * 0.18M;

                    var montoTotal = montoGravado + montoIgv;

                    comprobanteSB.Replace("@MONTO_GRAVADA", ventaInfo.Gravadas.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_INAFECTA", "0.00");
                    comprobanteSB.Replace("@MONTO_EXONERADA", "0.00");
                    comprobanteSB.Replace("@MONTO_GRATUITA", "0.00");
                    comprobanteSB.Replace("@MONTO_IGV", ventaInfo.TotalIgv.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2"));

                    comprobanteSB.Replace("@PRODUCTO_DETALLE", facturaSBDetalle.ToString());
                    #endregion

                    nombreArchivoComprobante = "Factura_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf";
                }
                if (ventaInfo.TipoDocumento.Equals(Constantes.TipoComprobanteBoletaVenta))
                {
                    //comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/BoletaPowerGas.html"));
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto(PlantillaBoleta));
                    #region Boleta
                    comprobanteSB.Replace("@EMPRESA_LOGO", HttpContext.Current.Server.MapPath(empresaInfo.Imagen));
                    comprobanteSB.Replace("@EMPRESA_NOMBRE", ventaInfo.NombreComercialEmisor);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.NroDocumentoEmisor);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.IdDocumento);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmisor);
                    comprobanteSB.Replace("@EMPRESA_TELEFONO", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_FAX", String.Empty);
                    comprobanteSB.Replace("@EMPRESA_PAIS", empresaInfo.Pais);
                    comprobanteSB.Replace("@EMPRESA_DEPARTAMENTO", empresaInfo.Departamento);
                    comprobanteSB.Replace("@EMPRESA_PROVINCIA", empresaInfo.Provincia);
                    comprobanteSB.Replace("@EMPRESA_DISTRITO", empresaInfo.Distrito);
                    comprobanteSB.Replace("@FECHAEMISION", ventaInfo.FechaEmision.ToString("dd/MM/yyyy"));
                    comprobanteSB.Replace("@AGENCIA_DIRECCION", agenciaInfo.Direccion);


                    //var clienteInfo = new Cliente().Listar(ventaInfo.ClienteId).FirstOrDefault();
                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.NombreComercialReceptor);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionReceptor);
                    comprobanteSB.Replace("@CLIENTE_DISTRITO", String.Empty);
                    comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NroDocumentoReceptor);
                    comprobanteSB.Replace("@CLIENTE_CODIGO", String.Empty);

                    comprobanteSB.Replace("@MONEDA", ventaInfo.Moneda);

                    var facturaSBDetalle = new StringBuilder("");
                    facturaSBDetalle.Append("<table style=\"width: 100%; border-collapse: collapse;\">");
                    facturaSBDetalle.Append("   <thead>");
                    facturaSBDetalle.Append("       <tr>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">ITEM</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 50%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">DESCRIPCI&Oacute;N</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">CANT</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">UND</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">VALOR UNIT</td>");
                    facturaSBDetalle.Append("           <td style=\"width: 10%; border-bottom: 1px solid #0b44e9; text-align: center;\" class=\"Estilo67\">SUBTOTAL</td>");
                    facturaSBDetalle.Append("       </tr>");
                    facturaSBDetalle.Append("   </thead>");

                    var montoGravado       = 0M;
                    var montoImpuestoTotal = 0M;
                    foreach (var vd in ventaGasolutionsDetalleInfoLista)
                    {
                        facturaSBDetalle.Append("   <tr>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.CodigoItem + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 50%; border: 1px none #0b44e9; text-align: left; vertical-align: top;\" class=\"Estilo8\">" + vd.Descripcion + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + ((vd.TotalVenta - vd.Impuesto) / vd.PrecioUnitario).ToString("N2") + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.UnidadMedida + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + vd.PrecioUnitario.ToString("N2") + "</td>");
                        facturaSBDetalle.Append("       <td style=\"width: 10%; border: 1px none #0b44e9; text-align: center; vertical-align: top;\" class=\"Estilo8\">" + (vd.TotalVenta - vd.Impuesto).ToString("N2") + "</td>");
                        facturaSBDetalle.Append("   </tr>");

                        montoGravado = montoGravado + vd.TotalVenta;
                    }
                    facturaSBDetalle.Append("</table>");

                    var montoIgv = montoGravado * 0.18M;

                    var montoTotal = montoGravado + montoIgv;

                    comprobanteSB.Replace("@MONTO_GRAVADA", ventaInfo.Gravadas.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_INAFECTA", "0.00");
                    comprobanteSB.Replace("@MONTO_EXONERADA", "0.00");
                    comprobanteSB.Replace("@MONTO_GRATUITA", "0.00");
                    comprobanteSB.Replace("@MONTO_IGV", ventaInfo.TotalIgv.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.TotalVenta.ToString("N2"));

                    comprobanteSB.Replace("@PRODUCTO_DETALLE", facturaSBDetalle.ToString());
                    #endregion

                    nombreArchivoComprobante = "Boleta_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf";
                }

                if (!Directory.Exists(rutaPdfFactura))
                {
                    Directory.CreateDirectory(rutaPdfFactura);
                }

                #region Codigo QR
                var codigoQR = ventaInfo.NroDocumentoReceptor + "|" + ventaInfo.TipoDocumento + "|" + ventaInfo.IdDocumento.Substring(0, 4) + "|" +
                               ventaInfo.IdDocumento.Substring(5, ventaInfo.IdDocumento.Length - 5) + "|" + ventaInfo.TotalIgv + "|" + ventaInfo.TotalVenta + "|" +
                               ventaInfo.FechaEmision + "|" + ventaInfo.TipoDocumentoReceptor + "|" + ventaInfo.NroDocumentoReceptor + "|" +
                               responseFirma.Data.ResumenFirma + "|" + responseFirma.Data.ValorFirma;

                // instantiate a writer object
                var barcodeWriter = new BarcodeWriter();
                // set the barcode format
                barcodeWriter.Format = BarcodeFormat.PDF_417;
                // write text and generate a 2-D barcode as a bitmap
                // barcodeWriter.Write(codigoQR).Save(@"C:\Users\jeremy\Desktop\generated.bmp");
                //barcodeWriter.Write(codigoQR).Save(HostingEnvironment.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NumeroDocumentoCliente + "/" + _documento.IdDocumento + ".bmp"));
                barcodeWriter.Write(codigoQR).Save(rutaPdfFactura + "/" + _documento.IdDocumento + ".bmp");
                #endregion

                comprobanteSB.Replace("@CODIGO_QR", HttpContext.Current.Server.MapPath("~/Archivos/Documentos/Cliente/" + ventaInfo.NroDocumentoReceptor + "/" + _documento.IdDocumento + ".bmp"));
                comprobanteSB.Replace("@MONTO_LETRAS", Herramientas.NumeroALetras.numeroAletras(ventaInfo.TotalVenta));

                comprobanteSB = Herramientas.Helper.EncodeHtml(comprobanteSB);
                //var margins = new PageMargins();
                //margins.Left = 1;
                //htmlToComprobante.Margins = margins;

                var pdfBytesFactura = htmlToComprobante.GeneratePdf(comprobanteSB.ToString());


                // var comprobanteImpreso = rutaPdfFactura + "\\" + nombreArchivoComprobante + ".pdf";
                File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".pdf", pdfBytesFactura);
                File.WriteAllBytes(rutaPdfFactura + "/" + nombreArchivoComprobante + ".xml", Convert.FromBase64String(responseFirma.Data.TramaXmlFirmado));

                Negocio.Helper.ActualizarColumnasTabla("VentaGasolutions", new string[] { "ComprobanteImpreso" }, new string[] { nombreArchivoComprobante + ".pdf" }, new string[] { "VentaGasolutionsId" }, new string[] { ventaInfo.VentaGasolutionsId.ToString() });

                #endregion

                mensaje = "El Comprobante se generó correctamente" + "@" + (nombreArchivoComprobante) + "@" + ventaInfo.NroDocumentoReceptor;
            }
            catch (Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaPresentacion);
                mensaje = rethrow ? ex.Message : Constantes.ExcepcionPoliticaPresentacion;
                mensaje = (mensaje + "-" + ex.Source) + "@" + "" + "@" + "";
            }
            return(mensaje);
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
 async Task <FirmadoResponse> ICertificador.FirmarXml(FirmadoRequest request)
 {
     return(await Task.Factory.StartNew(It.IsAny <FirmadoResponse>));
 }
Ejemplo n.º 30
0
        private static void CrearNotaCredito()
        {
            try
            {
                Console.WriteLine("Ejemplo Nota de Crédito de Factura");
                var documento = new DocumentoElectronico
                {
                    Emisor = CrearEmisor(),
                    Receptor = new Contribuyente
                    {
                        NroDocumento = "20257471609",
                        TipoDocumento = "6",
                        NombreLegal = "FRAMEWORK PERU"
                    },
                    IdDocumento = "FN11-001",
                    FechaEmision = DateTime.Today.AddDays(-5).ToString(FormatoFecha),
                    Moneda = "PEN",
                    MontoEnLetras = "SON CINCO SOLES CON 0/100",
                    CalculoIgv = 0.18m,
                    CalculoIsc = 0.10m,
                    CalculoDetraccion = 0.04m,
                    TipoDocumento = "07",
                    TotalIgv = 0.76m,
                    TotalVenta = 5,
                    Gravadas = 4.24m,
                    Items = new List<DetalleDocumento>
                    {
                        new DetalleDocumento
                        {
                            Id = 1,
                            Cantidad = 1,
                            PrecioReferencial = 4.24m,
                            PrecioUnitario = 4.24m,
                            TipoPrecio = "01",
                            CodigoItem = "2435675",
                            Descripcion = "Correcion Factura",
                            UnidadMedida = "NIU",
                            Impuesto = 0.76m,
                            TipoImpuesto = "10", // Gravada
                            TotalVenta = 5,
                            Suma = 5
                        }
                    },
                    Discrepancias = new List<Discrepancia>
                    {
                        new Discrepancia
                        {
                            NroReferencia = "FF11-001",
                            Tipo = "01",
                            Descripcion = "Anulacion de la operacion"
                        }
                    },
                    Relacionados = new List<DocumentoRelacionado>
                    {
                        new DocumentoRelacionado
                        {
                            NroDocumento = "FF11-001",
                            TipoDocumento = "01"
                        }
                    }
                };

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

                var documentoResponse = RestHelper<DocumentoElectronico, DocumentoResponse>.Execute("GenerarNotaCredito", documento);

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

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

                var responseFirma = RestHelper<FirmadoRequest, FirmadoResponse>.Execute("Firmar", firmado);

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

                File.WriteAllBytes("notacredito.xml", Convert.FromBase64String(responseFirma.TramaXmlFirmado));

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

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

                var enviarDocumentoResponse = RestHelper<EnviarDocumentoRequest, EnviarDocumentoResponse>.Execute("EnviarDocumento", documentoRequest);

                if (!enviarDocumentoResponse.Exito)
                {
                    throw new InvalidOperationException(enviarDocumentoResponse.MensajeError);
                }

                File.WriteAllBytes("notacreditocdr.zip", Convert.FromBase64String(enviarDocumentoResponse.TramaZipCdr));

                Console.WriteLine("Respuesta de SUNAT:");
                Console.WriteLine(enviarDocumentoResponse.MensajeRespuesta);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }