private void CrearReciboParaEstaFactura() { Lbl.Comprobantes.ComprobanteConArticulos Factura = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; Lbl.Comprobantes.ReciboDeCobro Recibo = new Lbl.Comprobantes.ReciboDeCobro(Lfx.Workspace.Master.GetNewConnection("Nuevo recibo para " + Factura.ToString()) as Lfx.Data.Connection); Recibo.Crear(); Recibo.Facturas.AddWithValue(Factura, Factura.ImporteImpago); Recibo.Cliente = Factura.Cliente; Recibo.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; Recibo.ConceptoTexto = "Cancelación de " + Factura.ToString(); Lfc.FormularioEdicion NuevoRecibo = Lfc.Instanciador.InstanciarFormularioEdicion(Recibo); NuevoRecibo.MdiParent = this.ParentForm.MdiParent; NuevoRecibo.Show(); }
/// <summary> /// Generar un PDF a partir de un comprobante y guardarlo en la carpeta predeterminada de comprobantes. /// </summary> public void GenerarPdf(Lbl.Comprobantes.ComprobanteConArticulos comprobante) { var Generador = new Util.Comprobantes.GeneradorPdf(comprobante); var VariantePv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[comprobante.PV].Variante; if (VariantePv > 0) { Generador.Variante = (Util.Comprobantes.Variantes)VariantePv; } var Carpeta = System.IO.Path.Combine(Lbl.Sys.Config.CarpetaEmpresa, "Comprobantes", "PV" + comprobante.PV.ToString()); Lfx.Environment.Folders.EnsurePathExists(Carpeta); Generador.GenerarYGuardar(System.IO.Path.Combine(Carpeta, comprobante.ToString() + ".pdf")); }
private Lfx.Types.OperationResult EditarPago() { Lbl.Comprobantes.ComprobanteConArticulos Factura = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Factura.ImporteCancelado >= Factura.Total) { return(new Lfx.Types.FailureOperationResult("Este comprobante ya fue cancelado en su totalidad.")); } if (Factura.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.Efectivo) { using (IDbTransaction Trans = Factura.Connection.BeginTransaction()) { Factura.AsentarPago(false); Factura.MoverExistencias(false); Trans.Commit(); } this.PuedeEditarPago = false; } else if (Factura.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { CrearReciboParaEstaFactura(); } else { using (Comprobantes.Recibos.EditarCobro FormularioEditarPago = new Comprobantes.Recibos.EditarCobro()) { FormularioEditarPago.Cobro.FromCobro(new Lbl.Comprobantes.Cobro(this.Connection, Factura.FormaDePago)); FormularioEditarPago.Cobro.FormaDePagoEditable = true; FormularioEditarPago.Cobro.Importe = Factura.Total; FormularioEditarPago.Cobro.ImporteVisible = true; FormularioEditarPago.Cobro.ImporteEditable = false; if (FormularioEditarPago.ShowDialog() == DialogResult.OK) { Lbl.Comprobantes.Cobro MiCobro = FormularioEditarPago.Cobro.ToCobro(Factura.Connection); if (MiCobro.FormaDePago.Id != Factura.FormaDePago.Id) { // Tengo que actualizar la forma de pago using (IDbTransaction Trans = Factura.Connection.BeginTransaction()) { Factura.FormaDePago = MiCobro.FormaDePago; EntradaFormaPago.Elemento = MiCobro; Factura.Connection.FieldInt("UPDATE comprob SET id_formapago=" + MiCobro.FormaDePago.Id.ToString() + " WHERE id_comprob=" + Factura.Id.ToString()); if (MiCobro.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { // Si la nueva forma de pago es cta. cte., asiento el saldo // Y uso saldo a favor, si lo hay decimal Saldo = Factura.Cliente.CuentaCorriente.ObtenerSaldo(true); Factura.Cliente.CuentaCorriente.AsentarMovimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Saldo a Cta. Cte. s/" + Factura.ToString(), Factura.ImporteImpago, null, Factura, null, null); if (Saldo < 0) { Saldo = Math.Abs(Saldo); if (Saldo > Factura.Total) { Factura.CancelarImporte(Factura.Total, null); } else { Factura.CancelarImporte(Saldo, null); } } } Trans.Commit(); } } switch (Factura.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: using (IDbTransaction TransEfe = Factura.Connection.BeginTransaction()) { Lbl.Cajas.Caja CajaDiaria = new Lbl.Cajas.Caja(Factura.Connection, Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria); CajaDiaria.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, Factura.ToString(), Factura.Cliente, Factura.ImporteImpago, Factura.Obs, Factura, null, null); Factura.CancelarImporte(Factura.Total, null); TransEfe.Commit(); } break; case Lbl.Pagos.TiposFormasDePago.CuentaCorriente: CrearReciboParaEstaFactura(); break; case Lbl.Pagos.TiposFormasDePago.ChequeTerceros: using (IDbTransaction TransCheTer = Factura.Connection.BeginTransaction()) { Lbl.Bancos.Cheque Cheque = MiCobro.Cheque; Cheque.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; Cheque.ConceptoTexto = "Cobro s/" + this.Elemento.ToString(); Cheque.Factura = Factura; Cheque.Guardar(); Factura.CancelarImporte(Factura.Total, null); TransCheTer.Commit(); } PuedeEditarPago = false; break; case Lbl.Pagos.TiposFormasDePago.Tarjeta: using (IDbTransaction TransTarj = Factura.Connection.BeginTransaction()) { Lbl.Pagos.Cupon CuponCredito = MiCobro.Cupon; CuponCredito.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; CuponCredito.ConceptoTexto = "Cobro s/" + Factura.ToString(); if (EntradaVendedor.ValueInt > 0) { CuponCredito.Vendedor = new Lbl.Personas.Persona(Factura.Connection, EntradaVendedor.ValueInt); } CuponCredito.Factura = Factura; CuponCredito.Guardar(); Factura.CancelarImporte(Factura.Total, null); TransTarj.Commit(); } PuedeEditarPago = false; break; case Lbl.Pagos.TiposFormasDePago.Caja: using (IDbTransaction TransCaja = Factura.Connection.BeginTransaction()) { Lbl.Cajas.Caja CajaDeposito = MiCobro.CajaDestino; CajaDeposito.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Cobro s/" + Factura.ToString(), Factura.Cliente, MiCobro.Importe, MiCobro.Obs, Factura, null, null); Factura.CancelarImporte(Factura.Total, null); TransCaja.Commit(); } PuedeEditarPago = false; break; default: throw new NotImplementedException("No se reconoce la forma de pago " + Factura.FormaDePago.Tipo.ToString()); } } else { return(new Lfx.Types.SuccessOperationResult()); } } this.PuedeEditarPago = false; } return(new Lfx.Types.SuccessOperationResult()); }
public override void AfterPrint() { PuedeEditarPago = this.EsCancelable(); Lbl.Comprobantes.ComprobanteConArticulos Comprob = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Comprob.Impreso) { if (Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero.ContainsKey(Comprob.PV)) { var Pv = Lbl.Comprobantes.PuntoDeVenta.TodosPorNumero[Comprob.PV]; if (Pv.Tipo == Lbl.Comprobantes.TipoPv.ElectronicoAfip) { // Es un punto de venta electrónico... abro el PDF generado var Carpeta = System.IO.Path.Combine(Lbl.Sys.Config.CarpetaEmpresa, "Comprobantes", "PV" + Comprob.PV.ToString()); System.Diagnostics.Process.Start(System.IO.Path.Combine(Carpeta, Comprob.ToString() + ".pdf")); } } switch (Comprob.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: //El pago lo asentó la rutina de impresión //Yo sólo muestro la ventanita de calcular el cambio Comprobantes.PagoVuelto FormularioVuelto = new Comprobantes.PagoVuelto(); FormularioVuelto.Total = Lfx.Types.Parsing.ParseCurrency(EntradaTotal.Text); FormularioVuelto.ShowDialog(); break; case Lbl.Pagos.TiposFormasDePago.ChequePropio: case Lbl.Pagos.TiposFormasDePago.ChequeTerceros: case Lbl.Pagos.TiposFormasDePago.Tarjeta: case Lbl.Pagos.TiposFormasDePago.OtroValor: case Lbl.Pagos.TiposFormasDePago.Caja: if (this.EsCancelable()) { EditarPago(); } break; } } }
public void MostrarFacturas() { ListaFacturas.BeginUpdate(); ListaFacturas.Items.Clear(); Lbl.Comprobantes.Recibo Rec = this.Elemento as Lbl.Comprobantes.Recibo; foreach (Lbl.Comprobantes.ComprobanteImporte CompImp in Rec.Facturas) { Lbl.Comprobantes.ComprobanteConArticulos Fc = CompImp.Comprobante; ListViewItem AgregarFactura = ListaFacturas.Items.Add(Fc.GetHashCode().ToString()); AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Fc.ToString())); AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatDate(Fc.Fecha))); AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatCurrency(Fc.Total, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales))); AgregarFactura.SubItems.Add(new ListViewItem.ListViewSubItem(AgregarFactura, Lfx.Types.Formatting.FormatCurrency(Fc.Total - Fc.ImporteCancelado, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales))); } LabelAgregarFacturas.Visible = ListaFacturas.Items.Count == 0 && this.Elemento.Existe == false; BotonQuitarFactura.Visible = ListaFacturas.Items.Count > 0; if (ListaFacturas.Items.Count > 0 && ListaFacturas.SelectedItems.Count == 0) { ListaFacturas.Items[ListaFacturas.Items.Count - 1].Selected = true; ListaFacturas.Items[ListaFacturas.Items.Count - 1].Focused = true; } EtiquetaFacturasImporte.Text = Lfx.Types.Formatting.FormatCurrency(Rec.Facturas.ImporteImpago, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales); ListaFacturas.EndUpdate(); }
public override string ObtenerValorCampo(string nombreCampo, string formato) { switch (nombreCampo.ToUpperInvariant()) { case "CLIENTE": case "CLIENTE.NOMBRE": return(this.Comprobante.Cliente.ToString()); case "LOCALIDAD": case "LOCALIDAD.NOMBRE": case "CLIENTE.LOCALIDAD": case "CLIENTE.LOCALIDAD.NOMBRE": if (this.Comprobante.Cliente.Localidad == null) { return(""); } else { return(this.Comprobante.Cliente.Localidad.ToString()); } case "DOMICILIO": case "CLIENTE.DOMICILIO": if (this.Comprobante.Cliente.Domicilio != null && this.Comprobante.Cliente.Domicilio.Length > 0) { return(this.Comprobante.Cliente.Domicilio); } else { return(this.Comprobante.Cliente.DomicilioLaboral); } case "CLIENTE.DOCUMENTO": if (this.Comprobante.Cliente.ClaveTributaria != null) { return(this.Comprobante.Cliente.ClaveTributaria.ToString()); } else { return(this.Comprobante.Cliente.NumeroDocumento); } case "CUIT": case "CLIENTE.CUIT": if (this.Comprobante.Cliente.ClaveTributaria != null) { return(this.Comprobante.Cliente.ClaveTributaria.ToString()); } else { return(""); } case "IVA": case "CLIENTE.IVA": return(this.Comprobante.Cliente.SituacionTributaria.ToString()); case "CLIENTE.ID": return(this.Comprobante.Cliente.Id.ToString()); case "VENDEDOR": case "VENDEDOR.NOMBRE": return(this.Comprobante.Vendedor.ToString()); case "TOTAL": case "COMPROBANTE.TOTAL": return(Lfx.Types.Formatting.FormatCurrencyForPrint(this.Recibo.Total, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesFinal)); case "SONPESOS": return(Lfx.Types.Formatting.SpellNumber(this.Recibo.Total)); case "FACTURAS": if (Recibo.Facturas.Count > 0) { string Res = null; foreach (Lbl.Comprobantes.ComprobanteImporte CompImp in Recibo.Facturas) { Lbl.Comprobantes.ComprobanteConArticulos Comprob = CompImp.Comprobante; if (Res == null) { Res = Comprob.ToString(); } else { Res += ", " + Comprob.ToString(); } } return(Res); } else { return(""); } case "VALORES": System.Text.StringBuilder Valores = new System.Text.StringBuilder(); if (Recibo.Pagos != null && Recibo.Pagos.Count > 0) { foreach (Lbl.Comprobantes.Pago Pg in Recibo.Pagos) { switch (Pg.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: Valores.AppendLine("Efectivo : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); break; case Lbl.Pagos.TiposFormasDePago.ChequeTerceros: case Lbl.Pagos.TiposFormasDePago.ChequePropio: Valores.AppendLine("Cheque : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" Nº " + Pg.Cheque.Numero + " del banco " + Pg.Cheque.Banco.ToString()); Valores.AppendLine(" emitido por " + Pg.Cheque.Emisor); Valores.AppendLine(" el día " + Lfx.Types.Formatting.FormatDate(Pg.Cheque.FechaEmision)); Valores.AppendLine(" pagadero el " + Lfx.Types.Formatting.FormatDate(Pg.Cheque.FechaCobro)); break; case Lbl.Pagos.TiposFormasDePago.Tarjeta: Valores.AppendLine("Pago con Tarjeta : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" tarjeta " + Pg.ConceptoTexto.ToString()); break; case Lbl.Pagos.TiposFormasDePago.Caja: Valores.AppendLine("Ingreso en Cuenta : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" cuenta " + Pg.CajaOrigen.ToString()); break; default: Valores.AppendLine("Otro Pago : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" " + Pg.ToString()); break; } } } else if (Recibo.Cobros != null && Recibo.Cobros.Count > 0) { foreach (Lbl.Comprobantes.Cobro Pg in Recibo.Cobros) { switch (Pg.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: Valores.AppendLine("Efectivo : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); break; case Lbl.Pagos.TiposFormasDePago.ChequeTerceros: case Lbl.Pagos.TiposFormasDePago.ChequePropio: Valores.AppendLine("Cheque : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" Nº " + Pg.Cheque.Numero + " del banco " + Pg.Cheque.Banco.ToString()); Valores.AppendLine(" emitido por " + Pg.Cheque.Emisor); Valores.AppendLine(" el día " + Lfx.Types.Formatting.FormatDate(Pg.Cheque.FechaEmision)); Valores.AppendLine(" pagadero el " + Lfx.Types.Formatting.FormatDate(Pg.Cheque.FechaCobro)); break; case Lbl.Pagos.TiposFormasDePago.Tarjeta: Valores.AppendLine("Pago con Tarjeta : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" cupón " + Pg.Cupon.ToString()); break; case Lbl.Pagos.TiposFormasDePago.Caja: Valores.AppendLine("Ingreso en Cuenta : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" cuenta " + Pg.CajaDestino.ToString()); break; default: Valores.AppendLine("Otro Pago : " + Lbl.Sys.Config.Moneda.Simbolo + " " + Lfx.Types.Formatting.FormatCurrency(Pg.Importe, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales)); Valores.AppendLine(" " + Pg.ToString()); break; } } } //Agrego las facturas que corresponde al recibo. if (Recibo.Facturas != null) { Valores.AppendLine("********* COMPROBANTES *********"); foreach (Lbl.Comprobantes.ComprobanteImporte fac in Recibo.Facturas) { Valores.AppendLine(fac.Comprobante.ToString()); } } return(Valores.ToString()); default: return(base.ObtenerValorCampo(nombreCampo, formato)); } }
/// <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); }