Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reincluído projeto do PdfClown na solução #1568

Merged
merged 1 commit into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions NFe.Danfe.PdfClown/Atributos/AlturaFixaAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace NFe.Danfe.PdfClown.Atributos
{
internal class AlturaFixaAttribute : Attribute
{
}
}
65 changes: 65 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Graphics;
using NFe.Danfe.PdfClown.Modelo;

namespace NFe.Danfe.PdfClown.Blocos
{
/// <summary>
/// Define um bloco básico do DANFE.
/// </summary>
internal abstract class BlocoBase : ElementoBase
{
/// <summary>
/// Constante de proporção dos campos para o formato retrato A4, porcentagem dividida pela largura desenhável.
/// </summary>
public const float Proporcao = 100F / 200F;

public DanfeViewModel ViewModel { get; private set; }

public abstract PosicaoBloco Posicao { get; }

/// <summary>
/// Pilha principal.
/// </summary>
public VerticalStack MainVerticalStack { get; private set; }

/// <summary>
/// Quando verdadeiro, o bloco é mostrado apenas na primeira página, caso contário é mostrado em todas elas.
/// </summary>
public virtual Boolean VisivelSomentePrimeiraPagina => true;

public virtual String Cabecalho => null;

public BlocoBase(DanfeViewModel viewModel, Estilo estilo) : base(estilo)
{
MainVerticalStack = new VerticalStack();
ViewModel = viewModel ?? throw new ArgumentNullException(nameof(viewModel));

if (!String.IsNullOrWhiteSpace(Cabecalho))
{
MainVerticalStack.Add(new CabecalhoBloco(estilo, Cabecalho));
}
}

public LinhaCampos AdicionarLinhaCampos()
{
var l = new LinhaCampos(Estilo, Width);
l.Width = Width;
l.Height = Constantes.CampoAltura;
MainVerticalStack.Add(l);
return l;
}

public override void Draw(Gfx gfx)
{
base.Draw(gfx);
MainVerticalStack.SetPosition(X, Y);
MainVerticalStack.Width = Width;
MainVerticalStack.Draw(gfx);
}

public override float Height { get => MainVerticalStack.Height; set => throw new NotSupportedException(); }
public override bool PossuiContono => false;
}
}
59 changes: 59 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoCalculoImposto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Modelo;

namespace NFe.Danfe.PdfClown.Blocos
{
class BlocoCalculoImposto : BlocoBase
{
public BlocoCalculoImposto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
var m = ViewModel.CalculoImposto;

var l = AdicionarLinhaCampos()
.ComCampoNumerico("BASE DE CÁLC. DO ICMS", m.BaseCalculoIcms)
.ComCampoNumerico("VALOR DO ICMS", m.ValorIcms)
.ComCampoNumerico("BASE DE CÁLC. ICMS S.T.", m.BaseCalculoIcmsSt)
.ComCampoNumerico("VALOR DO ICMS SUBST.", m.ValorIcmsSt)
.ComCampoNumerico("V. IMP. IMPORTAÇÃO", m.ValorII);

if (ViewModel.ExibirIcmsInterestadual)
{
l.ComCampoNumerico("V. ICMS UF REMET.", m.vICMSUFRemet)
.ComCampoNumerico("VALOR DO FCP", m.vFCPUFDest);
}

if (ViewModel.ExibirPisConfins)
{
l.ComCampoNumerico("VALOR DO PIS", m.ValorPis);
}

l.ComCampoNumerico("V. TOTAL PRODUTOS", m.ValorTotalProdutos)
.ComLargurasIguais();

l = AdicionarLinhaCampos()
.ComCampoNumerico("Valor do Frete", m.ValorFrete)
.ComCampoNumerico("Valor do Seguro", m.ValorSeguro)
.ComCampoNumerico("Desconto", m.Desconto)
.ComCampoNumerico("Outras Despesas", m.OutrasDespesas)
.ComCampoNumerico("Valor Ipi", m.ValorIpi);

if (ViewModel.ExibirIcmsInterestadual)
{
l.ComCampoNumerico("V. ICMS UF DEST.", m.vICMSUFDest)
.ComCampoNumerico("V. TOT. TRIB.", m.ValorAproximadoTributos);
}

if (ViewModel.ExibirPisConfins)
{
l.ComCampoNumerico("VALOR DO COFINS", m.ValorCofins);
}

l.ComCampoNumerico("Valor Total da Nota", m.ValorTotalNota)
.ComLargurasIguais();
}

public override PosicaoBloco Posicao => PosicaoBloco.Topo;
public override string Cabecalho => "Cálculo do Imposto";
}
}
24 changes: 24 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoCalculoIssqn.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Modelo;

namespace NFe.Danfe.PdfClown.Blocos
{
internal class BlocoCalculoIssqn : BlocoBase
{
public BlocoCalculoIssqn(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
var m = viewModel.CalculoIssqn;

AdicionarLinhaCampos()
.ComCampo("INSCRIÇÃO MUNICIPAL", m.InscricaoMunicipal, AlinhamentoHorizontal.Centro)
.ComCampoNumerico("VALOR TOTAL DOS SERVIÇOS", m.ValorTotalServicos)
.ComCampoNumerico("BASE DE CÁLCULO DO ISSQN", m.BaseIssqn)
.ComCampoNumerico("VALOR TOTAL DO ISSQN", m.ValorIssqn)
.ComLargurasIguais();
}

public override PosicaoBloco Posicao => PosicaoBloco.Base;
public override string Cabecalho => "CÁLCULO DO ISSQN";
}
}
38 changes: 38 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoCanhoto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Modelo;
using NFe.Danfe.PdfClown.Tools;

namespace NFe.Danfe.PdfClown.Blocos
{
internal class BlocoCanhoto : BlocoBase
{
public const float TextoRecebimentoAltura = 10;
public const float AlturaLinha2 = 9;

public BlocoCanhoto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
var textoRecebimento = new TextoSimples(estilo, viewModel.TextoRecebimento) { Height = TextoRecebimentoAltura, TamanhoFonte = 8 };
var nfe = new NumeroNfSerie(estilo, viewModel.NfNumero.ToString(Formatador.FormatoNumeroNF), viewModel.NfSerie.ToString()) { Height = AlturaLinha2 + TextoRecebimentoAltura, Width = 30 };

var campos = new LinhaCampos(Estilo) { Height = AlturaLinha2 }
.ComCampo("Data de Recebimento", null)
.ComCampo("Identificação e assinatura do recebedor", null)
.ComLarguras(50, 0);

var coluna1 = new VerticalStack();
coluna1.Add(textoRecebimento, campos);

var linha = new FlexibleLine() { Height = coluna1.Height }
.ComElemento(coluna1)
.ComElemento(nfe)
.ComLarguras(0, 16);

MainVerticalStack.Add(linha, new LinhaTracejada(2));

}

public override PosicaoBloco Posicao => PosicaoBloco.Topo;

}
}
54 changes: 54 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoDadosAdicionais.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Graphics;
using NFe.Danfe.PdfClown.Modelo;

namespace NFe.Danfe.PdfClown.Blocos
{
internal class BlocoDadosAdicionais : BlocoBase
{
public const float AlturaMinima = 25;
private CampoMultilinha _cInfComplementares;
private FlexibleLine _Linha;
private Campo _cReservadoFisco;
public const float InfComplementaresLarguraPorcentagem = 75;

public BlocoDadosAdicionais(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
_cInfComplementares = new CampoMultilinha("Informações Complementares", ViewModel.TextoAdicional(), estilo);
_cReservadoFisco = new CampoMultilinha("Reservado ao fisco", ViewModel.TextoAdicionalFisco(), estilo);

_Linha = new FlexibleLine() { Height = _cInfComplementares.Height }
.ComElemento(_cInfComplementares)
.ComElemento(_cReservadoFisco)
.ComLarguras(InfComplementaresLarguraPorcentagem, 0);

MainVerticalStack.Add(_Linha);
}

public override float Width
{
get => base.Width;
set
{
base.Width = value;
// Força o ajuste da altura do InfComplementares
if (_cInfComplementares != null && _Linha != null)
{
_Linha.Width = value;
_Linha.Posicionar();
_cInfComplementares.Height = AlturaMinima;
_Linha.Height = _cInfComplementares.Height;
}
}
}

public override void Draw(Gfx gfx)
{
base.Draw(gfx);
}

public override PosicaoBloco Posicao => PosicaoBloco.Base;
public override string Cabecalho => "Dados adicionais";
}
}
39 changes: 39 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoDestinatarioRemetente.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Modelo;
using NFe.Danfe.PdfClown.Tools;

namespace NFe.Danfe.PdfClown.Blocos
{
internal class BlocoDestinatarioRemetente : BlocoBase
{
public BlocoDestinatarioRemetente(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
var destinatario = viewModel.Destinatario;

AdicionarLinhaCampos()
.ComCampo(Strings.RazaoSocial, destinatario.RazaoSocial)
.ComCampo(Strings.CnpjCpf, Formatador.FormatarCpfCnpj(destinatario.CnpjCpf), AlinhamentoHorizontal.Centro)
.ComCampo("Data de Emissão", viewModel.DataHoraEmissao.Formatar(), AlinhamentoHorizontal.Centro)
.ComLarguras(0, 45F * Proporcao, 30F * Proporcao);

AdicionarLinhaCampos()
.ComCampo(Strings.Endereco, destinatario.EnderecoLinha1)
.ComCampo(Strings.BairroDistrito, destinatario.EnderecoBairro)
.ComCampo(Strings.Cep, Formatador.FormatarCEP(destinatario.EnderecoCep), AlinhamentoHorizontal.Centro)
.ComCampo("Data Entrada / Saída", ViewModel.DataSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro)
.ComLarguras(0, 45F * Proporcao, 25F * Proporcao, 30F * Proporcao);

AdicionarLinhaCampos()
.ComCampo(Strings.Municipio, destinatario.Municipio)
.ComCampo(Strings.FoneFax, Formatador.FormatarTelefone(destinatario.Telefone), AlinhamentoHorizontal.Centro)
.ComCampo(Strings.UF, destinatario.EnderecoUf, AlinhamentoHorizontal.Centro)
.ComCampo(Strings.InscricaoEstadual, destinatario.Ie, AlinhamentoHorizontal.Centro)
.ComCampo("Hora Entrada / Saída", ViewModel.HoraSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro)
.ComLarguras(0, 35F * Proporcao, 7F * Proporcao, 40F * Proporcao, 30F * Proporcao);
}

public override string Cabecalho => "Destinatário / Remetente";
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
}
}
42 changes: 42 additions & 0 deletions NFe.Danfe.PdfClown/Blocos/BlocoDuplicataFatura.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using NFe.Danfe.PdfClown.Elementos;
using NFe.Danfe.PdfClown.Enumeracoes;
using NFe.Danfe.PdfClown.Modelo;

namespace NFe.Danfe.PdfClown.Blocos
{
internal class BlocoDuplicataFatura : BlocoBase
{

public BlocoDuplicataFatura(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
{
var de = viewModel.Duplicatas.Select(x => new Duplicata(estilo, x)).ToList();
var eh = de.First().Height;

int numeroElementosLinha = ViewModel.Orientacao == Orientacao.Paisagem ? 7 : 6;

int i = 0;

while (i < de.Count)
{
FlexibleLine fl = new FlexibleLine(Width, eh);

int i2;
for (i2 = 0; i2 < numeroElementosLinha && i < de.Count; i2++, i++)
{
fl.ComElemento(de[i]);
}

for (; i2 < numeroElementosLinha; i2++)
fl.ComElemento(new ElementoVazio());


fl.ComLargurasIguais();
MainVerticalStack.Add(fl);
}

}

public override string Cabecalho => "Fatura / Duplicata";
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
}
}
Loading
Loading