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

Implementacao de documento NFSe nativo em Html #148

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
8 changes: 8 additions & 0 deletions src/OpenAC.Net.NFSe.DANFSe.ReportNative/Class1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System;

namespace OpenAC.Net.NFSe.DANFSe.ReportNative
{
public class Class1
{
}
}
22 changes: 22 additions & 0 deletions src/OpenAC.Net.NFSe.DANFSe.ReportNative/Danfe/DanfeInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using OpenAC.Net.NFSe.Nota;

namespace OpenAC.Net.NFSe.DANFSe.ReportNative.Danfe
{
public class DanfeInfo
{
/// <summary>
/// Titulo do documento
/// </summary>
public string Titulo { get; set; }
/// <summary>
/// Nome da prefeitura
/// </summary>
public string NomePrefeitura { get; set; }
/// <summary>
/// Link da imagem da prefeitura
/// </summary>
public string LinkImagemLogo { get; set; }

public NotaServico NotaServico { get; set; }
}
}
165 changes: 165 additions & 0 deletions src/OpenAC.Net.NFSe.DANFSe.ReportNative/Danfe/DanfeNFSeHtml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using OpenAC.Net.NFSe.DANFSe.ReportNative.Properties;

namespace OpenAC.Net.NFSe.DANFSe.ReportNative.Danfe
{
public sealed class DanfeNFSeHtml
{
private readonly DanfeInfo _danfeInfo;

public DanfeNFSeHtml(DanfeInfo danfeInfo)
{
_danfeInfo = danfeInfo;
}

/// <summary>
/// Obter DANFE NFSe em formato html
/// </summary>
/// <returns></returns>
public Documento ObterDocHtml()
{
var html = Montar();
return new Documento { Html = html };
}

/// <summary>
/// Salvar DANFE NFSe em formato html
/// </summary>
/// <param name="caminho"></param>
/// <param name="nomeArquivo"></param>
public void SalvarDocHtml(string caminho,string nomeArquivo)
{
var conteudo = ObterDocHtml();
Utils.EscreverArquivo(caminho, nomeArquivo, conteudo.Html);
}

/// <summary>
/// Montar cabeçalho da DANFE
/// </summary>
/// <returns></returns>
private string Montar()
{
var list = new Dictionary<string, string>();
var nfse = _danfeInfo.NotaServico;
var nomePrefeitura = _danfeInfo.NomePrefeitura;
var titulo = _danfeInfo.Titulo;
var linkImg = _danfeInfo.LinkImagemLogo;

#region Cabecalho

list.Add("#ds_image", linkImg);
list.Add("#ds_title1#", nomePrefeitura);
list.Add("#ds_title2#", titulo);
list.Add("#nl_invoice#", nfse.IdentificacaoNFSe.Numero );
list.Add("#dt_invoice_issue#", nfse.IdentificacaoNFSe.DataEmissao.ToString("G"));
list.Add("#ds_protocol#", nfse.IdentificacaoNFSe.Chave);

#endregion

#region Prestador


list.Add("#nl_company_cnpj_cpf#", nfse.Prestador.CpfCnpj);
list.Add("#ds_company_issuer_name#", nfse.Prestador.NomeFantasia);
list.Add("#ds_company_address#", nfse.Prestador.Endereco.Logradouro);
list.Add("#ds_company_neighborhood#", nfse.Prestador.Endereco.Complemento);
list.Add("#nu_company_cep#", nfse.Prestador.Endereco.Cep);
list.Add("#ds_company_city_name#", nfse.Prestador.Endereco.Municipio);
list.Add("#ds_company_im#", nfse.Prestador.InscricaoMunicipal);
list.Add("#ds_company_uf#", nfse.Prestador.Endereco.Uf);

#endregion

#region Tomador

list.Add("#nl_client_cnpj_cpf#", nfse.Tomador.CpfCnpj);
list.Add("#ds_client_receiver_name#", nfse.Tomador.NomeFantasia);
list.Add("#ds_client_address#", nfse.Tomador.Endereco.Logradouro);
list.Add("#ds_client_neighborhood#", nfse.Tomador.Endereco.Complemento);
list.Add("#nu_client_cep#", nfse.Tomador.Endereco.Cep);
list.Add("#ds_client_city_name#", nfse.Tomador.Endereco.Municipio);
list.Add("#ds_client_uf#", nfse.Tomador.Endereco.Uf);
list.Add("#nl_client_im#", nfse.Tomador.InscricaoMunicipal);
list.Add("#ds_client_email#", nfse.Tomador.DadosContato.Email);

#endregion


#region Descricao Servicos

var descricao = nfse.Servico.Descricao;
var discriminacao = nfse.Servico.Discriminacao;
var descricao2 = $"{descricao}<br>{discriminacao}";
list.Add("#services#", descricao2);


#endregion

#region Valor Total

list.Add("#orderTotal#", nfse.Servico.Valores.ValorServicos.ToString());


#endregion

#region Impostos

list.Add("#cofins#", nfse.Servico.Valores.ValorCofins.ToString());
list.Add("#csll#", nfse.Servico.Valores.ValorCsll.ToString());
list.Add("#inss#", nfse.Servico.Valores.ValorInss.ToString());
list.Add("#irpj#", nfse.Servico.Valores.ValorIr.ToString());
list.Add("#pis#", nfse.Servico.Valores.ValorPis.ToString());
list.Add("#totaldeducoes#", nfse.Servico.Valores.ValorDeducoes.ToString());
list.Add("#basecalculo#", nfse.Servico.Valores.BaseCalculo.ToString());
list.Add("#vl_issqn_aliq#", nfse.Servico.Valores.Aliquota.ToString());
list.Add("#vl_issqn#", nfse.Servico.Valores.ValorIss.ToString());
list.Add("#iisqnretido#", nfse.Servico.Valores.ValorIssRetido.ToString());
list.Add("#serviceCode#", nfse.Servico.CodigoCnae.ToString());
list.Add("#orderTotallIq#", nfse.Servico.Valores.ValorLiquidoNfse.ToString());
list.Add("#outrasretencoes#", nfse.Servico.Valores.ValorOutrasRetencoes.ToString());



#endregion


#region Outras Informacoes

list.Add("#ds_additional_information#", nfse.OutrasInformacoes);

#endregion


return LerTemplateEsubstituirTags(Resources.nfse_template, list);
}

/// <summary>
/// Substituir chave pelo valor
/// </summary>
/// <param name="html"></param>
/// <param name="replacesList"></param>
/// <returns></returns>
private string Substituir(string html, Dictionary<string, string> replacesList)
{
foreach (var replaces in replacesList)
html = Regex.Replace(html, replaces.Key, replaces.Value ?? string.Empty, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 5));
return html;
}

/// <summary>
/// Realizar a leitura de arquivo e substitui tags
/// </summary>
/// <param name="nomeTemplate"></param>
/// <param name="dictionaryReplace"></param>
/// <returns></returns>
private string LerTemplateEsubstituirTags(string nomeTemplate, Dictionary<string, string> dictionaryReplace)
{
if (dictionaryReplace == null) return string.Empty;
return !dictionaryReplace.Any() ? string.Empty : Substituir(nomeTemplate, dictionaryReplace);
}

}
}
14 changes: 14 additions & 0 deletions src/OpenAC.Net.NFSe.DANFSe.ReportNative/Danfe/Documento.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace OpenAC.Net.NFSe.DANFSe.ReportNative.Danfe
{
public sealed class Documento
{
#region Propriedades

/// <summary>
/// Uma string Html contendo dados da DANFE
/// </summary>
public string Html { get; set; }

#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Authors>DSBR Brasil Team</Authors>
<Copyright>Copyright © Projeto OpenAC .Net 2014 - 2022</Copyright>
<Company>DSBR Brasil</Company>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\OpenAC.Net.NFSe\OpenAC.Net.NFSe.csproj" />
</ItemGroup>

<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>

<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>

</Project>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading