/// <summary> /// Lê o arquivo de lote retornado /// </summary> /// <param name="path">caminho do arquivo</param> /// <returns>Retorna o numero do lote </returns> public static InutilizacaoResult ReadRetornoInutilizacao(InutilizacaoResult result, string path) { XmlDocument xmlretInut = new XmlDocument(); xmlretInut.LoadXml(File.ReadAllText(path)); if (xmlretInut.DocumentElement.GetElementsByTagName("cStat").Count > 0) { result.Status = xmlretInut.DocumentElement.GetElementsByTagName("cStat").Item(0).InnerText; } if (xmlretInut.DocumentElement.GetElementsByTagName("nProt").Count > 0) { result.NumProtocolo = xmlretInut.DocumentElement.GetElementsByTagName("nProt").Item(0).InnerText; } if (xmlretInut.DocumentElement.GetElementsByTagName("dhRecbto").Count > 0) { result.DtaHoraRecbto = Convert.ToDateTime(xmlretInut.DocumentElement.GetElementsByTagName("dhRecbto").Item(0).InnerText); } if (result.Status == Status.InutilizacaoHomologada) result.Success = true; return result; }
/// <summary> /// Processa a resposta do xml /// </summary> public InutilizacaoResult ProcessaResposta() { InutilizacaoResult retornoSefaz = new InutilizacaoResult(); IList<string> wantedFiles = new List<String>(); wantedFiles.Add(Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.err")); wantedFiles.Add(Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.xml")); // Verifica se os arquivos de resposta já estão na // pasta de retorno do UniNFe, seja um número de lote // ou então um arquivo de erro. if(OpenPOS.NFe.Utilities.WaitFile(wantedFiles)) { if(File.Exists(Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.xml"))) { retornoSefaz = InutilizacaoResult.ReadRetornoInutilizacao(retornoSefaz, Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.xml")); LogNFe.Save(Enuns.TipoEvento.NFeNumeroLoteProcessado, "Número do lote processado com sucesso", "99999999999999999999999999999999999999999999", retornoSefaz.Status); wantedFiles.Clear(); } // Se for um arquivo de erro retorna o erro da seFaz else if(File.Exists(Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.err"))) { ResultBase result = OpenPOS.NFe.Utilities.SetErrorResult(retornoSefaz, Path.Combine(OpenPOS.Settings.NFe.PastaRetorno, ID + "-inu.err")); retornoSefaz.Message = result.Message; retornoSefaz.Exception = result.Exception; ILogNFe log = new LogNFe(); log.ChaveNFe = "99999999999999999999999999999999999999999999"; log.Evento = "Inutilização de Numeração"; log.Status = retornoSefaz.Status == null ? NFe.Status.NaoDefinido : retornoSefaz.Status; log.TipoEvento = Enuns.TipoEvento.NFeErroXML; LogNFe.Save(log); } } return retornoSefaz; }