public override void OnLoad() { m_CuentaCorriente = null; m_Etiquetas = null; m_EtiquetasOriginal = null; m_Grupo = null; m_Localidad = null; m_SituacionTributaria = null; m_SubGrupo = null; m_Vendedor = null; base.OnLoad(); }
/// <summary> /// Generar un PDF para un comprobante facturable. /// </summary> public PdfDocument GenerarFactura() { var Res = new PdfDocument(); switch (this.Variante) { case Variantes.RojoYNegro: this.Color1 = XColor.FromArgb(242, 46, 46); this.Color2 = XColor.FromArgb(220, 200, 135); this.Color3 = XColor.FromArgb(220, 200, 135); break; default: case Variantes.AzulYVerde: this.Color1 = XColor.FromArgb(48, 113, 242); this.Color2 = XColor.FromArgb(194, 243, 31); this.Color3 = XColors.Orange; break; } Res.Options.CompressContentStreams = true; Res.Language = "es_AR"; Res.Info.Title = Comprob.ToString(); Res.Info.Author = Lbl.Sys.Config.Empresa.RazonSocial; Res.Info.Creator = "Gestión Gestión; http://www.GestionLazaro.com"; Res.Info.Subject = "Factura electrónica autorizada por AFIP, CAE " + Comprob.CaeNumero; var Pagina = new PdfPage(Res) { Size = PageSize.A4 }; var Gfx = XGraphics.FromPdfPage(Pagina); var FuentePredeterminada = new XFont(FuenteSans, 11); var FuenteResaltada = new XFont(FuenteSans, 11, XFontStyle.Bold); var FuentePequena = new XFont(FuenteSans, 9); var FuenteArticulos = new XFont(FuenteSans, 10); var AreaUsable = new XRect(Margenes.Izquierda, Margenes.Arriba, Pagina.Width - Margenes.Derecha - Margenes.Izquierda, Pagina.Height - Margenes.Arriba - Margenes.Abajo); var Tf = new XTextFormatter(Gfx) { Font = FuentePredeterminada }; var LineaFina = new XPen(this.Color1, .3); var CuadroEncab = new XRect(AreaUsable.Left, AreaUsable.Top, AreaUsable.Width, 30 * mm); //Gfx.DrawRectangle(new XPen(Azul), XBrushes.Transparent, new XRect(-10, AreaUsable.Top, AreaUsable.Right + 10, 30 * mm)); Gfx.DrawRectangle(XPens.Transparent, new XSolidBrush(this.Color3), new XRect(AreaUsable.Left + AreaUsable.Width / 2 - 12 * mm, -10, 24 * mm, AreaUsable.Top + 10 + 16 * mm)); Gfx.DrawString(Comprob.Tipo.LetraONomenclatura, new XFont(FuenteSans, 24, XFontStyle.Bold), XBrushes.Black, new XRect(AreaUsable.Left + AreaUsable.Width / 2 - 12 * mm, AreaUsable.Top + 1 * mm, 24 * mm, 10 * mm), XStringFormats.Center); Gfx.DrawString("Cód. " + Afip.Ws.FacturaElectronica.Tablas.CodigoDeComprobantePorLetra(Comprob.Tipo.Nomenclatura).ToString().PadLeft(2, '0'), FuentePequena, XBrushes.Black, new XRect(AreaUsable.Left + AreaUsable.Width / 2 - 12 * mm, AreaUsable.Top + 10 * mm, 24 * mm, 6 * mm), XStringFormats.Center); var EncabIzquierdo = new XRect(AreaUsable.Left + 2 * mm, AreaUsable.Top + 2 * mm, AreaUsable.Width / 2 - 16 * mm, 26 * mm); var EncabDerecho = new XRect(AreaUsable.Left + AreaUsable.Width / 2 + 14 * mm, AreaUsable.Top + 2 * mm, AreaUsable.Width / 2 - 16 * mm, 26 * mm); Tf.Alignment = XParagraphAlignment.Right; Tf.DrawString(Comprob.PV.ToString().PadLeft(4, '0') + "-" + Comprob.Numero.ToString().PadLeft(8, '0') + "\n" + Comprob.Tipo.Nombre + "\n\n" + Lfx.Types.Formatting.FormatDate(Comprob.Fecha), FuenteResaltada, XBrushes.Black, EncabDerecho); Tf.Alignment = XParagraphAlignment.Left; var TextoEncab = ""; TextoEncab += Lbl.Sys.Config.Empresa.RazonSocial + "\n"; if (Lbl.Sys.Config.Empresa.SituacionTributaria > 0) { var EmpresaSituacion = new Lbl.Impuestos.SituacionTributaria(Comprob.Connection, Lbl.Sys.Config.Empresa.SituacionTributaria); if (EmpresaSituacion.Existe) { TextoEncab += EmpresaSituacion.Nombre + "\n"; } } if (Lbl.Sys.Config.Empresa.SucursalActual != null && string.IsNullOrWhiteSpace(Lbl.Sys.Config.Empresa.SucursalActual.Direccion) == false) { TextoEncab += Lbl.Sys.Config.Empresa.SucursalActual.Direccion + "\n"; } if (Lbl.Sys.Config.Empresa.ClaveTributaria != null) { TextoEncab += Lbl.Sys.Config.Empresa.ClaveTributaria.Nombre + ": " + Lbl.Sys.Config.Empresa.ClaveTributaria.ToString() + "\n"; } if (string.IsNullOrWhiteSpace(Lbl.Sys.Config.Empresa.NumeroIngresosBrutos) == false) { TextoEncab += "II.BB.: " + Lbl.Sys.Config.Empresa.NumeroIngresosBrutos + "\n"; } if (Lbl.Sys.Config.Empresa.InicioDeActividades != null) { TextoEncab += "Inicio act.: " + Lfx.Types.Formatting.FormatDate(Lbl.Sys.Config.Empresa.InicioDeActividades) + "\n"; } Tf.DrawString(TextoEncab, FuentePequena, XBrushes.Black, EncabDerecho); var Logo = new Lbl.Sys.Blob(this.Comprob.Connection, 1); if (Logo.Existe && Logo.Imagen != null) { // Poner el logotipo, centrado en el espacio de logo var XImagenLogo = XImage.FromGdiPlusImage(Logo.Imagen); var RatioX = (double)EncabIzquierdo.Width / XImagenLogo.PointWidth; var RatioY = (double)EncabDerecho.Height / XImagenLogo.PointHeight; var RatioFinal = Math.Min(RatioX, RatioY); var LogoTamanio = new XSize(XImagenLogo.PointWidth * RatioFinal, XImagenLogo.PointHeight * RatioFinal); var LogoRect = new XRect(EncabIzquierdo.Left + (EncabIzquierdo.Width - LogoTamanio.Width) / 2, EncabIzquierdo.Top + (EncabIzquierdo.Height - LogoTamanio.Height) / 2, LogoTamanio.Width, LogoTamanio.Height); Gfx.DrawImage(XImagenLogo, LogoRect); } else { // Poner el nombre de la empresa Tf.Alignment = XParagraphAlignment.Center; Tf.DrawString(Lbl.Sys.Config.Empresa.Nombre, new XFont(FuenteSans, 16, XFontStyle.Bold), new XSolidBrush(this.Color1), EncabIzquierdo); } var CuadroCliente = new XRect(AreaUsable.Left, CuadroEncab.Bottom + 4 * mm, AreaUsable.Width, 14 * mm); //Gfx.DrawLine(LineaFinaGris, CuadroCliente.Left, CuadroCliente.Bottom, CuadroCliente.Right, CuadroCliente.Bottom); Tf.Alignment = XParagraphAlignment.Left; Tf.DrawString("Cliente\nDomicilio\nCUIT", FuentePredeterminada, XBrushes.Black, CuadroCliente); string DatosCliente1 = Comprob.Cliente.ToString() + "\n" + Comprob.Cliente.Domicilio + "\n"; if (Comprob.Cliente.ClaveTributaria != null) { DatosCliente1 += Comprob.Cliente.ClaveTributaria.ToString(); } Tf.DrawString(DatosCliente1, FuenteResaltada, XBrushes.Black, new XRect(CuadroCliente.Left + 20 * mm, CuadroCliente.Top, CuadroCliente.Width, CuadroCliente.Width)); Tf.DrawString("Condición\nSituación\nCiudad", FuentePredeterminada, XBrushes.Black, new XRect(CuadroCliente.Left + 100 * mm, CuadroCliente.Top, CuadroCliente.Width, CuadroCliente.Width)); string DatosCliente2 = Comprob.FormaDePago.ToString() + "\n" + Comprob.Cliente.SituacionTributaria.ToString() + "\n"; if (Comprob.Cliente.Localidad != null) { DatosCliente2 += Comprob.Cliente.Localidad.ToString(); } Tf.DrawString(DatosCliente2, FuenteResaltada, XBrushes.Black, new XRect(CuadroCliente.Left + 120 * mm, CuadroCliente.Top, CuadroCliente.Width, CuadroCliente.Width)); // *** Artículos y detalles var CuadroArticulos = new XRect(AreaUsable.Left, CuadroCliente.Bottom + 4 * mm, AreaUsable.Width, 140 * mm); //Gfx.DrawRectangle(LineaFinaGris, CuadroArticulos); Gfx.DrawLine(LineaFina, CuadroArticulos.Left, CuadroArticulos.Top, CuadroArticulos.Right, CuadroArticulos.Top); var ColAnchos = new int[] { 24, 92, 14, 22, 22 }; var CuadroArticulosCodigos = new XRect(CuadroArticulos.Left, CuadroArticulos.Top, ColAnchos[0] * mm, CuadroArticulos.Height); var CuadroArticulosDetalles = new XRect(CuadroArticulosCodigos.Right, CuadroArticulos.Top, ColAnchos[1] * mm, CuadroArticulos.Height); var CuadroArticulosCantidades = new XRect(CuadroArticulosDetalles.Right, CuadroArticulos.Top, ColAnchos[2] * mm, CuadroArticulos.Height); var CuadroArticulosUnitarios = new XRect(CuadroArticulosCantidades.Right, CuadroArticulos.Top, ColAnchos[3] * mm, CuadroArticulos.Height); var CuadroArticulosSubtotales = new XRect(CuadroArticulosUnitarios.Right, CuadroArticulos.Top, ColAnchos[4] * mm, CuadroArticulos.Height); Gfx.DrawLine(LineaFina, CuadroArticulos.Left, CuadroArticulos.Top + 7 * mm, CuadroArticulos.Right, CuadroArticulos.Top + 7 * mm); CuadroArticulosCodigos.Offset(0, 1 * mm); CuadroArticulosDetalles.Offset(0, 1 * mm); CuadroArticulosCantidades.Offset(0, 1 * mm); CuadroArticulosUnitarios.Offset(0, 1 * mm); CuadroArticulosSubtotales.Offset(0, 1 * mm); Tf.Alignment = XParagraphAlignment.Left; Tf.DrawString("Código", FuenteResaltada, XBrushes.Black, CuadroArticulosCodigos); Tf.DrawString("Detalle", FuenteResaltada, XBrushes.Black, CuadroArticulosDetalles); Tf.Alignment = XParagraphAlignment.Right; Tf.DrawString("Cantidad", FuenteResaltada, XBrushes.Black, CuadroArticulosCantidades); Tf.DrawString("P. unitario", FuenteResaltada, XBrushes.Black, CuadroArticulosUnitarios); Tf.DrawString("Subtotal", FuenteResaltada, XBrushes.Black, CuadroArticulosSubtotales); CuadroArticulosCodigos.Offset(0, 7 * mm); CuadroArticulosDetalles.Offset(0, 7 * mm); CuadroArticulosCantidades.Offset(0, 7 * mm); CuadroArticulosUnitarios.Offset(0, 7 * mm); CuadroArticulosSubtotales.Offset(0, 7 * mm); Tf.Alignment = XParagraphAlignment.Left; // Generar un listado de códigos, detalles, cantidades, etc. string Codigos = "", Detalles = "", Cantidades = "", Unitarios = "", Importes = ""; foreach (var Det in Comprob.Articulos) { string CodigoImprimir, DetalleImprimir; if (Det.Articulo == null) { CodigoImprimir = ""; DetalleImprimir = Det.Nombre; } else { CodigoImprimir = Det.Articulo.Id.ToString(); DetalleImprimir = Det.Articulo.ToString(); } Codigos += CodigoImprimir + "\n"; Detalles += DetalleImprimir + "\n"; Cantidades += Lfx.Types.Formatting.FormatNumberForPrint(Det.Cantidad, Lbl.Sys.Config.Articulos.Decimales) + "\n"; Unitarios += Lfx.Types.Formatting.FormatCurrencyForPrint(Det.ImporteUnitarioFinalAImprimir, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesFinal) + "\n"; Importes += Lfx.Types.Formatting.FormatCurrencyForPrint(Det.ImporteAImprimir, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesFinal) + "\n"; } Tf.DrawString(Codigos, FuenteArticulos, XBrushes.Black, CuadroArticulosCodigos); Tf.DrawString(Detalles, FuenteArticulos, XBrushes.Black, CuadroArticulosDetalles); Tf.Alignment = XParagraphAlignment.Right; Tf.DrawString(Cantidades, FuenteArticulos, XBrushes.Black, CuadroArticulosCantidades); Tf.DrawString(Unitarios, FuenteArticulos, XBrushes.Black, CuadroArticulosUnitarios); Tf.DrawString(Importes, FuenteArticulos, XBrushes.Black, CuadroArticulosSubtotales); // *** Observaciones var CuadroObs = new XRect(AreaUsable.Left, CuadroArticulos.Bottom + 4 * mm, AreaUsable.Width, 26 * mm); Tf.Alignment = XParagraphAlignment.Left; if (Comprob.Obs != null && Comprob.Obs.Length > 0) { Tf.DrawString(Comprob.Obs, Comprob.Obs.Length > 400 ? FuentePequena : FuentePredeterminada, XBrushes.Black, CuadroObs); } Gfx.DrawLine(LineaFina, CuadroObs.Left, CuadroObs.Bottom, CuadroObs.Right, CuadroObs.Bottom); // *** Subtotal, IVA, descuento y total var CuadroTotales = new XRect(AreaUsable.Left, CuadroObs.Bottom + 4 * mm, 50 * mm, 14 * mm); Tf.Alignment = XParagraphAlignment.Left; Tf.DrawString("Subtotal\nIVA\nDescuento / recargo", FuentePredeterminada, XBrushes.Black, CuadroTotales); Tf.Alignment = XParagraphAlignment.Right; Tf.DrawString(string.Concat( Lfx.Types.Formatting.FormatCurrency(Comprob.SubtotalSinIvaFinal), "\n", Lfx.Types.Formatting.FormatCurrency(Comprob.ImporteIvaDiscriminadoFinal), "\n", Lfx.Types.Formatting.FormatNumber(Comprob.Descuento, 2) + "%" ), FuenteResaltada, XBrushes.Black, CuadroTotales); //Tf.DrawString("\nSon ciento veintitresmil cuatrocientos cincuenta y seis pesos con 00/100.", FuentePequena, XBrushes.Black, CuadroTotales); var CuadroTotal = new XRect(AreaUsable.Right - 50 * mm, CuadroTotales.Top, 50 * mm, CuadroTotales.Height); var CuadroFondoTotal = new XRect(AreaUsable.Right - 45 * mm, CuadroTotales.Top, 90 * mm, CuadroTotales.Height); Gfx.DrawRectangle(new XSolidBrush(this.Color2), CuadroFondoTotal); //Gfx.DrawRectangle(XBrushes.Silver, CuadroTotal); CuadroTotal.Offset(0, 3 * mm); Gfx.DrawString("TOTAL", new XFont(FuenteSans, 8), XBrushes.Black, CuadroFondoTotal.Left + 1 * mm, CuadroFondoTotal.Top + 3 * mm); Tf.Alignment = XParagraphAlignment.Right; Tf.DrawString("$ " + Lfx.Types.Formatting.FormatCurrency(Comprob.Total), new XFont(FuenteSans, 18, XFontStyle.Bold), XBrushes.Black, CuadroTotal); // *** Pie con información de AFIP y código de barras var CuadroPie = new XRect(AreaUsable.Left, AreaUsable.Bottom - 20 * mm, AreaUsable.Width, 20 * mm); Gfx.DrawLine(LineaFina, CuadroPie.Left, CuadroPie.Top, CuadroPie.Right, CuadroPie.Top); CuadroPie.Offset(0, 1 * mm); Tf.Alignment = XParagraphAlignment.Left; Tf.DrawString("Comprobante electrónico\nCAE Nº " + Comprob.CaeNumero + "\nCAE Vence " + Lfx.Types.Formatting.FormatDate(Comprob.CaeVencimiento), FuentePredeterminada, XBrushes.Black, new XRect(CuadroPie.Left + 110 * mm, CuadroPie.Top, CuadroPie.Width, CuadroPie.Height)); string TextoCodigoBarras = this.GenerarTextoCodigoDeBarras(); var CodBarras = new BarcodeLib.Barcode(); var ImagenCodBarras = CodBarras.Encode(BarcodeLib.TYPE.Interleaved2of5, TextoCodigoBarras, 1000, 120); var XImagenCodBarras = XImage.FromGdiPlusImage(ImagenCodBarras); Gfx.DrawImage(XImagenCodBarras, new XRect(CuadroPie.Left, CuadroPie.Bottom - 20 * mm, 100 * mm, 12 * mm)); Tf.Alignment = XParagraphAlignment.Center; Tf.DrawString(TextoCodigoBarras, FuentePredeterminada, XBrushes.Black, new XRect(CuadroPie.Left, CuadroPie.Bottom - 7 * mm, 100 * mm, 7 * mm)); Res.AddPage(Pagina); return(Res); }