Пример #1
0
        /// <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;
        }
Пример #2
0
        /// <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;
        }