Ejemplo n.º 1
0
        public int InsertarDetalle(VentaDetalleGasolutionsInfo ventaInfo)
        {
            int resultado;

            try
            {
                using (var oConnection = new SqlConnection(HelperAccesoDatos.GetCadenaConexion()))
                {
                    var sqlComando = new SqlCommand {
                        Connection = oConnection, CommandText = "InsertarVentaDetalleGasolutions", CommandType = CommandType.StoredProcedure
                    };

                    sqlComando.Parameters.Add("VentaGasolutionsId", SqlDbType.Int).Value = ventaInfo.VentaGasolutionsId;
                    sqlComando.Parameters.Add("Id", SqlDbType.Int).Value                 = ventaInfo.Id;
                    sqlComando.Parameters.Add("Cantidad", SqlDbType.Decimal).Value       = ventaInfo.Cantidad;
                    sqlComando.Parameters.Add("CodigoItem", SqlDbType.VarChar).Value     = ventaInfo.CodigoItem;
                    sqlComando.Parameters.Add("Descripcion", SqlDbType.VarChar).Value    = ventaInfo.Descripcion;
                    sqlComando.Parameters.Add("Impuesto", SqlDbType.Decimal).Value       = ventaInfo.Impuesto;
                    sqlComando.Parameters.Add("PrecioUnitario", SqlDbType.Decimal).Value = ventaInfo.PrecioUnitario;
                    sqlComando.Parameters.Add("TotalVenta", SqlDbType.Decimal).Value     = ventaInfo.TotalVenta;
                    sqlComando.Parameters.Add("UnidadMedida", SqlDbType.VarChar).Value   = ventaInfo.UnidadMedida;
                    sqlComando.Parameters.Add("TipoImpuesto", SqlDbType.VarChar).Value   = ventaInfo.TipoImpuesto;
                    sqlComando.Parameters.Add("TipoPrecio", SqlDbType.VarChar).Value     = ventaInfo.TipoPrecio;

                    oConnection.Open();
                    resultado = Convert.ToInt32(sqlComando.ExecuteScalar());

                    oConnection.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(resultado);
        }
        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);
        }