/// <summary>
/// Efetua a validação de qualquer XML, NFE, Cancelamento, Inutilização, etc..., e retorna se está ok ou não
/// </summary>
/// <param name="Arquivo">Nome do arquivo XML a ser validado e assinado</param>
/// <param name="PastaValidar">Nome da pasta onde fica os arquivos a serem validados</param>
/// <param name="PastaXMLErro">Nome da pasta onde é para gravar os XML´s validados que apresentaram erro.</param>
/// <param name="PastaXMLRetorno">Nome da pasta de retorno onde será gravado o XML com o status da validação</param>
/// <param name="Certificado">Certificado digital a ser utilizado na validação</param>
/// <by>Wandrey Mundin Ferreira</by>
/// <date>28/05/2009</date>
public void ValidarAssinarXML(string Arquivo)
{
int emp = Empresas.FindEmpresaByThread();
Boolean Assinou = true;
//Assinar o XML se tiver tag para assinar
AssinaturaDigital oAD = new AssinaturaDigital();
try
{
if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID)
{
this.EncryptAssinatura(Arquivo); //danasa: 12/2013
oAD.Assinar(Arquivo, emp, Empresas.Configuracoes[emp].UnidadeFederativaCodigo);
Assinou = true;
}
}
catch (Exception ex)
{
Assinou = false;
try
{
GravarXMLRetornoValidacao(Arquivo, "2", "Ocorreu um erro ao assinar o XML: " + ex.Message);
new Auxiliar().MoveArqErro(Arquivo);
}
catch
{
//Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada.
//Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010
}
}
if (Assinou)
{
#region Adicionar a tag do qrCode na NFCe
if (Arquivo.EndsWith(Propriedade.ExtEnvio.Nfe, StringComparison.InvariantCultureIgnoreCase))
{
if (!String.IsNullOrEmpty(Empresas.Configuracoes[emp].IndentificadorCSC))
{
QRCode qrCode = new QRCode(Empresas.Configuracoes[emp].IndentificadorCSC, Empresas.Configuracoes[emp].TokenCSC, Arquivo);
if (qrCode.CalcularLink())
{
string url = Empresas.Configuracoes[emp].AmbienteCodigo == (int)NFe.Components.TipoAmbiente.taHomologacao ? Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCeH : Empresas.Configuracoes[emp].URLConsultaDFe.UrlNFCe;
qrCode.GerarLinkConsulta(url);
qrCode.AddLinkQRCode();
}
}
}
#endregion
// Validar o Arquivo XML
if (TipoArqXml.nRetornoTipoArq >= 1 && TipoArqXml.nRetornoTipoArq <= SchemaXML.MaxID)
{
try
{
Validar(Arquivo);
if (Retorno != 0)
{
this.GravarXMLRetornoValidacao(Arquivo, "3", "Ocorreu um erro ao validar o XML: " + RetornoString);
new Auxiliar().MoveArqErro(Arquivo);
}
else
{
if (!Directory.Exists(Empresas.Configuracoes[emp].PastaValidado))
{
Directory.CreateDirectory(Empresas.Configuracoes[emp].PastaValidado);
}
string ArquivoNovo = Empresas.Configuracoes[emp].PastaValidado + "\\" + Functions.ExtrairNomeArq(Arquivo, ".xml") + ".xml";
Functions.Move(Arquivo, ArquivoNovo);
/*
if (File.Exists(ArquivoNovo))
{
FileInfo oArqNovo = new FileInfo(ArquivoNovo);
oArqNovo.Delete();
}
FileInfo oArquivo = new FileInfo(Arquivo);
oArquivo.MoveTo(ArquivoNovo);
*/
this.GravarXMLRetornoValidacao(Arquivo, "1", "XML assinado e validado com sucesso.");
}
}
catch (Exception ex)
{
try
{
this.GravarXMLRetornoValidacao(Arquivo, "4", "Ocorreu um erro ao validar o XML: " + ex.Message);
new Auxiliar().MoveArqErro(Arquivo);
}
catch
{
//Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada.
//Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010
}
}
}
else
{
try
{
this.GravarXMLRetornoValidacao(Arquivo, "5", "Ocorreu um erro ao validar o XML: " + TipoArqXml.cRetornoTipoArq);
new Auxiliar().MoveArqErro(Arquivo);
}
catch
{
//Se deu algum erro na hora de gravar o retorno do erro para o ERP, infelizmente não posso fazer nada.
//Isso pode acontecer se falhar rede, hd, problema de permissão de pastas, etc... Wandrey 23/03/2010
}
}
}
}