コード例 #1
0
ファイル: Factura.cs プロジェクト: quiquesys/PFACW0001
 protected void LlenaOpcional()
 {
     NumeroALetras numLetras = new NumeroALetras();
     generaOpcional();
     DataRow dr = DtOpcinoal.NewRow();
     for (int k=0;k<9;k++)
         dr[k] = Opcional[k];
     dr["TELEFONO"] = Telefono;
     TotalLetras = numLetras.ConvertirNumeroALetras(Total);
     dr["TOTAL_LETRAS"] = TotalLetras;
     DtOpcinoal.Rows.Add(dr);
 }
コード例 #2
0
        public static string ImprimirComprobante(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);
                ventaInfoLista = ventaInfoLista.Where(v => v.MontoTotal.Equals(montoTotal)).ToList();
                var ventaInfo = new VentaPetroamericaInfo();
                if (ventaInfoLista.Count > 0)
                {
                    ventaInfo = ventaInfoLista.FirstOrDefault();
                }
                else
                {
                    mensaje = "No se ha encontrado el comprobante." + "@" + "" + "@" + ventaInfo.NumeroDocumentoCliente;
                    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    = "";
                emisor.Direccion       = ventaInfo.DireccionEmpresa;
                emisor.Distrito        = "";
                emisor.NombreComercial = ventaInfo.RazonSocialEmpresa;
                emisor.NombreLegal     = ventaInfo.RazonSocialEmpresa;
                emisor.NroDocumento    = ventaInfo.RucEmpresa;
                emisor.Provincia       = "";
                emisor.TipoDocumento   = "6";
                emisor.Ubigeo          = "";
                emisor.Urbanizacion    = "";
                _documento.Emisor      = emisor;
                #endregion

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

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

                //item.Descripcion = vd.Producto;
                item.Descripcion = ventaInfo.Producto;
                //item.Id = itemId;
                item.Id = ventaInfo.ProductoId;
                itemId++;
                //item.Impuesto = vd.Igv;
                item.Impuesto = ventaInfo.MontoImpuesto;
                //item.PrecioUnitario = vd.PrecioUnitario;
                item.PrecioUnitario = ventaInfo.Precio;
                //item.Suma = vd.SubTotal;
                item.Suma = ventaInfo.MontoVenta;
                //item.TotalVenta = vd.MontoTotal;
                item.TotalVenta = ventaInfo.MontoTotal;
                //item.UnidadMedida = vd.UnidadMedida;
                item.UnidadMedida      = "NIU";
                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.MontoTotal);
                _documento.MontoPercepcion = 0;
                _documento.PlacaVehiculo   = ventaInfo.PlacaVehiculo;

                #region Receptor
                var receptor = new DocumentoElectronico().Receptor;
                receptor.Departamento    = "";
                receptor.Direccion       = ventaInfo.DireccionCliente;
                receptor.Distrito        = "";
                receptor.NombreComercial = ventaInfo.Cliente;
                receptor.NombreLegal     = ventaInfo.Cliente;
                receptor.NroDocumento    = ventaInfo.NumeroDocumentoCliente;
                receptor.Provincia       = "";
                receptor.TipoDocumento   = ventaInfo.TipoDocumentoIdCliente;
                receptor.Ubigeo          = "";
                receptor.Urbanizacion    = "";
                _documento.Receptor      = receptor;
                #endregion

                _documento.TipoDocumento      = ventaInfo.TipoComprobanteId;
                _documento.TotalIgv           = ventaInfo.MontoImpuesto;
                _documento.TotalIsc           = 0;
                _documento.TotalOtrosTributos = 0;
                _documento.TotalVenta         = ventaInfo.MontoTotal;
                #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.NumeroDocumentoCliente + "");

                #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.TipoComprobanteId.Equals(Constantes.TipoComprobanteFactura))
                {
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/FacturaPetroamerica.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.RazonSocialEmpresa);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmpresa);
                    comprobanteSB.Replace("@GRIFO_DIRECCION", ventaInfo.DireccionAgencia);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.RucEmpresa);
                    comprobanteSB.Replace("@IMPRESORA", ventaInfo.ImpresoraAgencia);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.Serie + "-" + ventaInfo.NumeroComprobante.ToString().PadLeft(8, '0'));
                    comprobanteSB.Replace("@FECHA", fechaEmision);

                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.Cliente);
                    comprobanteSB.Replace("@CLIENTE_RUC", ventaInfo.NumeroDocumentoCliente);
                    comprobanteSB.Replace("@CLIENTE_PLACA", ventaInfo.PlacaVehiculo);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionCliente);
                    comprobanteSB.Replace("@CANTIDAD", ventaInfo.Cantidad.ToString("N2"));
                    comprobanteSB.Replace("@PRECIO", ventaInfo.Precio.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.MontoVenta.ToString("N2"));
                    comprobanteSB.Replace("@PRODUCTO", ventaInfo.Producto);
                    comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda);
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.MontoVenta.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.MontoImpuesto.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.MontoTotal.ToString("N2"));
                    comprobanteSB.Replace("@VENDEDOR", ventaInfo.UsuarioCreacion);
                    comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma);

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

                    nombreArchivoComprobante = "Factura_" + DateTime.Now.ToString("ddMMyyyyhhmmss"); // + ".pdf";
                }
                if (ventaInfo.TipoComprobanteId.Equals(Constantes.TipoComprobanteBoletaVenta))
                {
                    comprobanteSB.Append(Herramientas.Helper.ObtenerTexto("~/Archivos/Plantillas/BoletaPetroamerica.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.RazonSocialEmpresa);
                    comprobanteSB.Replace("@EMPRESA_DIRECCION", ventaInfo.DireccionEmpresa);
                    comprobanteSB.Replace("@GRIFO_DIRECCION", ventaInfo.DireccionAgencia);
                    comprobanteSB.Replace("@EMPRESA_RUC", ventaInfo.RucEmpresa);
                    comprobanteSB.Replace("@IMPRESORA", ventaInfo.ImpresoraAgencia);
                    comprobanteSB.Replace("@NUMEROCOMPROBANTE", ventaInfo.Serie + "-" + ventaInfo.NumeroComprobante.ToString().PadLeft(8, '0'));
                    comprobanteSB.Replace("@FECHA", fechaEmision);
                    comprobanteSB.Replace("@CLIENTE_NOMBRE", ventaInfo.Cliente);
                    comprobanteSB.Replace("@CLIENTE_DIRECCION", ventaInfo.DireccionCliente);
                    comprobanteSB.Replace("@CANTIDAD", ventaInfo.Cantidad.ToString("N2"));
                    comprobanteSB.Replace("@PRECIO", ventaInfo.Precio.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.MontoVenta.ToString("N2"));
                    comprobanteSB.Replace("@PRODUCTO", ventaInfo.Producto);
                    comprobanteSB.Replace("@MONEDA_SIMBOLO", ventaInfo.SimboloMoneda);
                    comprobanteSB.Replace("@MONTO_VENTA", ventaInfo.MontoVenta.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_IMPUESTO", ventaInfo.MontoImpuesto.ToString("N2"));
                    comprobanteSB.Replace("@MONTO_TOTAL", ventaInfo.MontoTotal.ToString("N2"));
                    comprobanteSB.Replace("@VENDEDOR", ventaInfo.UsuarioCreacion);
                    comprobanteSB.Replace("@CODIGO_HASH", responseFirma.Data.ResumenFirma);

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

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

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

                #region Codigo QR
                var codigoQR = ventaInfo.NumeroDocumentoCliente + "|" + ventaInfo.TipoComprobanteId + "|" + ventaInfo.Serie + "|" +
                               ventaInfo.NumeroComprobante + "|" + ventaInfo.MontoImpuesto + "|" + ventaInfo.MontoTotal + "|" +
                               ventaInfo.FechaEmision + "|" + ventaInfo.TipoDocumentoIdCliente + "|" + ventaInfo.NumeroDocumentoCliente + "|" +
                               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.NumeroDocumentoCliente + "/" + _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.NumeroDocumentoCliente;
            }
            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);
        }