Skip to content

Commit 8881250

Browse files
Merge pull request #1568 from ZeusAutomacao/integracao_hercules_pdfclown
Reincluído projeto do PdfClown na solução
2 parents b495c32 + 9d14772 commit 8881250

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+5674
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace NFe.Danfe.PdfClown.Atributos
2+
{
3+
internal class AlturaFixaAttribute : Attribute
4+
{
5+
}
6+
}
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Graphics;
4+
using NFe.Danfe.PdfClown.Modelo;
5+
6+
namespace NFe.Danfe.PdfClown.Blocos
7+
{
8+
/// <summary>
9+
/// Define um bloco básico do DANFE.
10+
/// </summary>
11+
internal abstract class BlocoBase : ElementoBase
12+
{
13+
/// <summary>
14+
/// Constante de proporção dos campos para o formato retrato A4, porcentagem dividida pela largura desenhável.
15+
/// </summary>
16+
public const float Proporcao = 100F / 200F;
17+
18+
public DanfeViewModel ViewModel { get; private set; }
19+
20+
public abstract PosicaoBloco Posicao { get; }
21+
22+
/// <summary>
23+
/// Pilha principal.
24+
/// </summary>
25+
public VerticalStack MainVerticalStack { get; private set; }
26+
27+
/// <summary>
28+
/// Quando verdadeiro, o bloco é mostrado apenas na primeira página, caso contário é mostrado em todas elas.
29+
/// </summary>
30+
public virtual Boolean VisivelSomentePrimeiraPagina => true;
31+
32+
public virtual String Cabecalho => null;
33+
34+
public BlocoBase(DanfeViewModel viewModel, Estilo estilo) : base(estilo)
35+
{
36+
MainVerticalStack = new VerticalStack();
37+
ViewModel = viewModel ?? throw new ArgumentNullException(nameof(viewModel));
38+
39+
if (!String.IsNullOrWhiteSpace(Cabecalho))
40+
{
41+
MainVerticalStack.Add(new CabecalhoBloco(estilo, Cabecalho));
42+
}
43+
}
44+
45+
public LinhaCampos AdicionarLinhaCampos()
46+
{
47+
var l = new LinhaCampos(Estilo, Width);
48+
l.Width = Width;
49+
l.Height = Constantes.CampoAltura;
50+
MainVerticalStack.Add(l);
51+
return l;
52+
}
53+
54+
public override void Draw(Gfx gfx)
55+
{
56+
base.Draw(gfx);
57+
MainVerticalStack.SetPosition(X, Y);
58+
MainVerticalStack.Width = Width;
59+
MainVerticalStack.Draw(gfx);
60+
}
61+
62+
public override float Height { get => MainVerticalStack.Height; set => throw new NotSupportedException(); }
63+
public override bool PossuiContono => false;
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Modelo;
4+
5+
namespace NFe.Danfe.PdfClown.Blocos
6+
{
7+
class BlocoCalculoImposto : BlocoBase
8+
{
9+
public BlocoCalculoImposto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
10+
{
11+
var m = ViewModel.CalculoImposto;
12+
13+
var l = AdicionarLinhaCampos()
14+
.ComCampoNumerico("BASE DE CÁLC. DO ICMS", m.BaseCalculoIcms)
15+
.ComCampoNumerico("VALOR DO ICMS", m.ValorIcms)
16+
.ComCampoNumerico("BASE DE CÁLC. ICMS S.T.", m.BaseCalculoIcmsSt)
17+
.ComCampoNumerico("VALOR DO ICMS SUBST.", m.ValorIcmsSt)
18+
.ComCampoNumerico("V. IMP. IMPORTAÇÃO", m.ValorII);
19+
20+
if (ViewModel.ExibirIcmsInterestadual)
21+
{
22+
l.ComCampoNumerico("V. ICMS UF REMET.", m.vICMSUFRemet)
23+
.ComCampoNumerico("VALOR DO FCP", m.vFCPUFDest);
24+
}
25+
26+
if (ViewModel.ExibirPisConfins)
27+
{
28+
l.ComCampoNumerico("VALOR DO PIS", m.ValorPis);
29+
}
30+
31+
l.ComCampoNumerico("V. TOTAL PRODUTOS", m.ValorTotalProdutos)
32+
.ComLargurasIguais();
33+
34+
l = AdicionarLinhaCampos()
35+
.ComCampoNumerico("Valor do Frete", m.ValorFrete)
36+
.ComCampoNumerico("Valor do Seguro", m.ValorSeguro)
37+
.ComCampoNumerico("Desconto", m.Desconto)
38+
.ComCampoNumerico("Outras Despesas", m.OutrasDespesas)
39+
.ComCampoNumerico("Valor Ipi", m.ValorIpi);
40+
41+
if (ViewModel.ExibirIcmsInterestadual)
42+
{
43+
l.ComCampoNumerico("V. ICMS UF DEST.", m.vICMSUFDest)
44+
.ComCampoNumerico("V. TOT. TRIB.", m.ValorAproximadoTributos);
45+
}
46+
47+
if (ViewModel.ExibirPisConfins)
48+
{
49+
l.ComCampoNumerico("VALOR DO COFINS", m.ValorCofins);
50+
}
51+
52+
l.ComCampoNumerico("Valor Total da Nota", m.ValorTotalNota)
53+
.ComLargurasIguais();
54+
}
55+
56+
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
57+
public override string Cabecalho => "Cálculo do Imposto";
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Modelo;
4+
5+
namespace NFe.Danfe.PdfClown.Blocos
6+
{
7+
internal class BlocoCalculoIssqn : BlocoBase
8+
{
9+
public BlocoCalculoIssqn(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
10+
{
11+
var m = viewModel.CalculoIssqn;
12+
13+
AdicionarLinhaCampos()
14+
.ComCampo("INSCRIÇÃO MUNICIPAL", m.InscricaoMunicipal, AlinhamentoHorizontal.Centro)
15+
.ComCampoNumerico("VALOR TOTAL DOS SERVIÇOS", m.ValorTotalServicos)
16+
.ComCampoNumerico("BASE DE CÁLCULO DO ISSQN", m.BaseIssqn)
17+
.ComCampoNumerico("VALOR TOTAL DO ISSQN", m.ValorIssqn)
18+
.ComLargurasIguais();
19+
}
20+
21+
public override PosicaoBloco Posicao => PosicaoBloco.Base;
22+
public override string Cabecalho => "CÁLCULO DO ISSQN";
23+
}
24+
}
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Modelo;
4+
using NFe.Danfe.PdfClown.Tools;
5+
6+
namespace NFe.Danfe.PdfClown.Blocos
7+
{
8+
internal class BlocoCanhoto : BlocoBase
9+
{
10+
public const float TextoRecebimentoAltura = 10;
11+
public const float AlturaLinha2 = 9;
12+
13+
public BlocoCanhoto(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
14+
{
15+
var textoRecebimento = new TextoSimples(estilo, viewModel.TextoRecebimento) { Height = TextoRecebimentoAltura, TamanhoFonte = 8 };
16+
var nfe = new NumeroNfSerie(estilo, viewModel.NfNumero.ToString(Formatador.FormatoNumeroNF), viewModel.NfSerie.ToString()) { Height = AlturaLinha2 + TextoRecebimentoAltura, Width = 30 };
17+
18+
var campos = new LinhaCampos(Estilo) { Height = AlturaLinha2 }
19+
.ComCampo("Data de Recebimento", null)
20+
.ComCampo("Identificação e assinatura do recebedor", null)
21+
.ComLarguras(50, 0);
22+
23+
var coluna1 = new VerticalStack();
24+
coluna1.Add(textoRecebimento, campos);
25+
26+
var linha = new FlexibleLine() { Height = coluna1.Height }
27+
.ComElemento(coluna1)
28+
.ComElemento(nfe)
29+
.ComLarguras(0, 16);
30+
31+
MainVerticalStack.Add(linha, new LinhaTracejada(2));
32+
33+
}
34+
35+
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
36+
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Graphics;
4+
using NFe.Danfe.PdfClown.Modelo;
5+
6+
namespace NFe.Danfe.PdfClown.Blocos
7+
{
8+
internal class BlocoDadosAdicionais : BlocoBase
9+
{
10+
public const float AlturaMinima = 25;
11+
private CampoMultilinha _cInfComplementares;
12+
private FlexibleLine _Linha;
13+
private Campo _cReservadoFisco;
14+
public const float InfComplementaresLarguraPorcentagem = 75;
15+
16+
public BlocoDadosAdicionais(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
17+
{
18+
_cInfComplementares = new CampoMultilinha("Informações Complementares", ViewModel.TextoAdicional(), estilo);
19+
_cReservadoFisco = new CampoMultilinha("Reservado ao fisco", ViewModel.TextoAdicionalFisco(), estilo);
20+
21+
_Linha = new FlexibleLine() { Height = _cInfComplementares.Height }
22+
.ComElemento(_cInfComplementares)
23+
.ComElemento(_cReservadoFisco)
24+
.ComLarguras(InfComplementaresLarguraPorcentagem, 0);
25+
26+
MainVerticalStack.Add(_Linha);
27+
}
28+
29+
public override float Width
30+
{
31+
get => base.Width;
32+
set
33+
{
34+
base.Width = value;
35+
// Força o ajuste da altura do InfComplementares
36+
if (_cInfComplementares != null && _Linha != null)
37+
{
38+
_Linha.Width = value;
39+
_Linha.Posicionar();
40+
_cInfComplementares.Height = AlturaMinima;
41+
_Linha.Height = _cInfComplementares.Height;
42+
}
43+
}
44+
}
45+
46+
public override void Draw(Gfx gfx)
47+
{
48+
base.Draw(gfx);
49+
}
50+
51+
public override PosicaoBloco Posicao => PosicaoBloco.Base;
52+
public override string Cabecalho => "Dados adicionais";
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Modelo;
4+
using NFe.Danfe.PdfClown.Tools;
5+
6+
namespace NFe.Danfe.PdfClown.Blocos
7+
{
8+
internal class BlocoDestinatarioRemetente : BlocoBase
9+
{
10+
public BlocoDestinatarioRemetente(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
11+
{
12+
var destinatario = viewModel.Destinatario;
13+
14+
AdicionarLinhaCampos()
15+
.ComCampo(Strings.RazaoSocial, destinatario.RazaoSocial)
16+
.ComCampo(Strings.CnpjCpf, Formatador.FormatarCpfCnpj(destinatario.CnpjCpf), AlinhamentoHorizontal.Centro)
17+
.ComCampo("Data de Emissão", viewModel.DataHoraEmissao.Formatar(), AlinhamentoHorizontal.Centro)
18+
.ComLarguras(0, 45F * Proporcao, 30F * Proporcao);
19+
20+
AdicionarLinhaCampos()
21+
.ComCampo(Strings.Endereco, destinatario.EnderecoLinha1)
22+
.ComCampo(Strings.BairroDistrito, destinatario.EnderecoBairro)
23+
.ComCampo(Strings.Cep, Formatador.FormatarCEP(destinatario.EnderecoCep), AlinhamentoHorizontal.Centro)
24+
.ComCampo("Data Entrada / Saída", ViewModel.DataSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro)
25+
.ComLarguras(0, 45F * Proporcao, 25F * Proporcao, 30F * Proporcao);
26+
27+
AdicionarLinhaCampos()
28+
.ComCampo(Strings.Municipio, destinatario.Municipio)
29+
.ComCampo(Strings.FoneFax, Formatador.FormatarTelefone(destinatario.Telefone), AlinhamentoHorizontal.Centro)
30+
.ComCampo(Strings.UF, destinatario.EnderecoUf, AlinhamentoHorizontal.Centro)
31+
.ComCampo(Strings.InscricaoEstadual, destinatario.Ie, AlinhamentoHorizontal.Centro)
32+
.ComCampo("Hora Entrada / Saída", ViewModel.HoraSaidaEntrada.Formatar(), AlinhamentoHorizontal.Centro)
33+
.ComLarguras(0, 35F * Proporcao, 7F * Proporcao, 40F * Proporcao, 30F * Proporcao);
34+
}
35+
36+
public override string Cabecalho => "Destinatário / Remetente";
37+
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using NFe.Danfe.PdfClown.Elementos;
2+
using NFe.Danfe.PdfClown.Enumeracoes;
3+
using NFe.Danfe.PdfClown.Modelo;
4+
5+
namespace NFe.Danfe.PdfClown.Blocos
6+
{
7+
internal class BlocoDuplicataFatura : BlocoBase
8+
{
9+
10+
public BlocoDuplicataFatura(DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo)
11+
{
12+
var de = viewModel.Duplicatas.Select(x => new Duplicata(estilo, x)).ToList();
13+
var eh = de.First().Height;
14+
15+
int numeroElementosLinha = ViewModel.Orientacao == Orientacao.Paisagem ? 7 : 6;
16+
17+
int i = 0;
18+
19+
while (i < de.Count)
20+
{
21+
FlexibleLine fl = new FlexibleLine(Width, eh);
22+
23+
int i2;
24+
for (i2 = 0; i2 < numeroElementosLinha && i < de.Count; i2++, i++)
25+
{
26+
fl.ComElemento(de[i]);
27+
}
28+
29+
for (; i2 < numeroElementosLinha; i2++)
30+
fl.ComElemento(new ElementoVazio());
31+
32+
33+
fl.ComLargurasIguais();
34+
MainVerticalStack.Add(fl);
35+
}
36+
37+
}
38+
39+
public override string Cabecalho => "Fatura / Duplicata";
40+
public override PosicaoBloco Posicao => PosicaoBloco.Topo;
41+
}
42+
}

0 commit comments

Comments
 (0)