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

Criação do atributo personalizado "[TString]" o qual deve ser utiliza… #6

Closed
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
35 changes: 35 additions & 0 deletions DFe.Utils/Attributes/TStringAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Text.RegularExpressions;

namespace DFe.Utils.Attributes
{
/// <summary>
/// Indica que esta propriedade, corresponde ao tipo 'TString' (Tipo string genérico), do schema da NF-e ([!-ÿ]{1}[ -ÿ]{0,}[!-ÿ]{1}|[!-ÿ]{1})
/// <para></para>
///
/// Utilize este atributo, para forçar a correção dos dados enviados nesta propriedade
/// </summary>
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class TStringAttribute : Attribute
{
/// <summary>
/// Remove caracteres inválidos, de acordo com o tipo: TString (Tipo string genérico) do arquivo 'tiposBasico_v4.00.xsd'
/// </summary>
/// <param name="valor"></param>
/// <returns></returns>
public static string CorrigirValor(string valor)
{
// Qualquer string que comece e termine com um ou mais caracteres no intervalo de ! (33) a ÿ (255) ou espaços em branco.
var regex = new Regex(@"[^!-ÿ\s]+");

// Substitui todos os caracteres que não correspondem ao padrão por uma string vazia,
// removendo todos os caracteres inválidos
valor = regex.Replace(valor, "");

// Remove espaços no início e no final da string
valor = valor.Trim();

return valor;
}
}
}
16 changes: 9 additions & 7 deletions NFe.AppTeste.NetCore/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,8 @@ private static infNFe GetInf(int numero, ModeloDocumento modelo, VersaoServico v
infNFe.infAdic = new infAdic() { infCpl = "Troco: 10,00" }; //Susgestão para impressão do troco em NFCe
}

infNFe.ExecutarCorrecaoDeDados(infNFe);

return infNFe;
}

Expand All @@ -545,7 +547,7 @@ private static ide GetIdentificacao(int numero, ModeloDocumento modelo, VersaoSe
ide ide = new ide
{
cUF = _configuracoes.EnderecoEmitente.UF,
natOp = "VENDA",
natOp = " VENDA ",
mod = modelo,
serie = 1,
nNF = numero,
Expand All @@ -556,7 +558,7 @@ private static ide GetIdentificacao(int numero, ModeloDocumento modelo, VersaoSe
cNF = "1234",
tpAmb = _configuracoes.CfgServico.tpAmb,
finNFe = FinalidadeNFe.fnNormal,
verProc = "3.000"
verProc = " 3.000 "
};

if (ide.tpEmis != TipoEmissao.teNormal)
Expand Down Expand Up @@ -649,7 +651,7 @@ private static dest GetDestinatario(VersaoServico versao, ModeloDocumento modelo
CNPJ = "99999999000191",
//CPF = "99999999999",
};
dest.xNome = "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; //Obrigatório para NFe e opcional para NFCe
dest.xNome = " NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL "; //Obrigatório para NFe e opcional para NFCe
dest.enderDest = GetEnderecoDestinatario(); //Obrigatório para NFe e opcional para NFCe

//if (versao == VersaoServico.Versao200)
Expand All @@ -668,15 +670,15 @@ private static enderDest GetEnderecoDestinatario()
{
enderDest enderDest = new enderDest
{
xLgr = "RUA ...",
xLgr = " RUA ...",
nro = "S/N",
xBairro = "CENTRO",
xBairro = " CENTRO ",
cMun = 2802908,
xMun = "ITABAIANA",
xMun = " ITABAIANA ",
UF = "SE",
CEP = "49500000",
cPais = 1058,
xPais = "BRASIL"
xPais = " BRASIL "
};
return enderDest;
}
Expand Down
2 changes: 2 additions & 0 deletions NFe.Classes/Informacoes/Destinatario/dest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
using System;
using System.Xml.Serialization;
using DFe.Classes.Flags;
using DFe.Utils.Attributes;
using NFe.Classes.Servicos.Tipos;

namespace NFe.Classes.Informacoes.Destinatario
Expand Down Expand Up @@ -102,6 +103,7 @@ public string CPF
/// <summary>
/// E04 - Razão Social ou nome do destinatário
/// </summary>
[TString]
public string xNome { get; set; }

/// <summary>
Expand Down
7 changes: 7 additions & 0 deletions NFe.Classes/Informacoes/Destinatario/enderDest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */
/********************************************************************************/

using DFe.Utils.Attributes;
using System;
using System.Linq;

Expand All @@ -43,21 +44,25 @@ public class enderDest
/// <summary>
/// E06 - Logradouro
/// </summary>
[TString]
public string xLgr { get; set; }

/// <summary>
/// E07 - Número
/// </summary>
[TString]
public string nro { get; set; }

/// <summary>
/// E08 - Complemento
/// </summary>
[TString]
public string xCpl { get; set; }

/// <summary>
/// E09 - Bairro
/// </summary>
[TString]
public string xBairro { get; set; }

/// <summary>
Expand All @@ -69,6 +74,7 @@ public class enderDest
/// <summary>
/// E11 - Nome do município, informar EXTERIOR para operações com o exterior.
/// </summary>
[TString]
public string xMun { get; set; }

/// <summary>
Expand Down Expand Up @@ -107,6 +113,7 @@ public string CEP
/// E15 - Nome do País
/// <para>Brasil ou BRASIL</para>
/// </summary>
[TString]
public string xPais { get; set; }

/// <summary>
Expand Down
4 changes: 4 additions & 0 deletions NFe.Classes/Informacoes/Identificacao/ide.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
using DFe.Classes.Entidades;
using DFe.Classes.Flags;
using DFe.Utils;
using DFe.Utils.Attributes;
using NFe.Classes.Informacoes.Identificacao.Tipos;

namespace NFe.Classes.Informacoes.Identificacao
Expand All @@ -56,6 +57,7 @@ public class ide
/// <summary>
/// B04 - Descrição da Natureza da Operação
/// </summary>
[TString]
public string natOp { get; set; }

/// <summary>
Expand Down Expand Up @@ -220,6 +222,7 @@ public bool indIntermedSpecified
/// <summary>
/// B27 - versão do aplicativo utilizado no processo de emissão
/// </summary>
[TString]
public string verProc { get; set; }

/// <summary>
Expand All @@ -244,6 +247,7 @@ public string ProxydhCont
/// <summary>
/// B29 - Informar a Justificativa da entrada
/// </summary>
[TString]
public string xJust { get; set; }

/// <summary>
Expand Down
98 changes: 98 additions & 0 deletions NFe.Classes/Informacoes/_baseNFe.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/********************************************************************************/
/* Projeto: Biblioteca ZeusNFe */
/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */
/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */
/* */
/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */
/* Zeusdev Tecnologia LTDA ME */
/* */
/* Você pode obter a última versão desse arquivo no GitHub */
/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */
/* */
/* */
/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */
/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */
/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */
/* qualquer versão posterior. */
/* */
/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */
/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */
/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/
/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */
/* */
/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/
/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */
/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */
/* Você também pode obter uma copia da licença em: */
/* http://www.opensource.org/licenses/lgpl-license.php */
/* */
/* Zeusdev Tecnologia LTDA ME - [email protected] */
/* http://www.zeusautomacao.com.br/ */
/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */
/********************************************************************************/

using DFe.Utils.Attributes;
using System.Collections;
using System.Collections.Generic;

namespace NFe.Classes.Informacoes
{
public class _baseNFe
{
public void ExecutarCorrecaoDeDados(object obj)
{
var tipo = obj.GetType();

// Corrige as propriedades
var propriedades = tipo.GetProperties();
foreach (var propriedade in propriedades)
{
if (!propriedade.CanRead || !propriedade.CanWrite)
{
continue;
}

// Ignora propriedades indexadas
if (propriedade.GetIndexParameters().Length > 0)
{
continue;
}

var atributosTString = propriedade.GetCustomAttributes(typeof(TStringAttribute), true);
if (atributosTString.Length > 0)
{
if (propriedade.GetValue(obj) is string valor)
{
var valorCorrigido = TStringAttribute.CorrigirValor(valor);
propriedade.SetValue(obj, valorCorrigido);
}
}

// Se a propriedade é uma lista, itera sobre os itens na lista
if (propriedade.PropertyType.IsGenericType && propriedade.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
var lista = propriedade.GetValue(obj) as IList;
if (lista != null)
{
foreach (var item in lista)
{
ExecutarCorrecaoDeDados(item);
}
}
}
else
{
// Verifica se a propriedade é do tipo de uma classe
if (propriedade.PropertyType.IsClass && propriedade.PropertyType != typeof(string))
{
var propValor = propriedade.GetValue(obj);
if (propValor != null)
{
ExecutarCorrecaoDeDados(propValor);
}
}
}
}
}
}
}
2 changes: 1 addition & 1 deletion NFe.Classes/Informacoes/infNFe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@

namespace NFe.Classes.Informacoes
{
public class infNFe
public class infNFe: _baseNFe
{
public infNFe()
{
Expand Down
Loading