示例#1
0
        /// <summary>
        /// Verifica e retorna o Status do Servido da NFE. Para isso este método gera o arquivo XML necessário
        /// para obter o status do serviõ e faz a leitura do XML de retorno, disponibilizando uma string com a mensagem
        /// obtida.
        /// </summary>
        /// <returns>Retorna uma string com a mensagem obtida do webservice de status do serviço da NFe</returns>
        /// <example>string vPastaArq = this.CriaArqXMLStatusServico();</example>
        /// <by>Wandrey Mundin Ferreira</by>
        /// <date>17/06/2008</date>
        public string VerStatusServico(string XmlNfeDadosMsg)
        {
            Auxiliar oAux = new Auxiliar();

            string ArqXMLRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" +
                                   oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.PedSta) +
                                   "-sta.xml";

            string ArqERRRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" +
                                   oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.PedSta) +
                                   "-sta.err";

            string result = string.Empty;

            try
            {
                result = (string)EnviaArquivoERecebeResposta(1, ArqXMLRetorno, ArqERRRetorno);
            }
            finally
            {
                oAux.DeletarArquivo(ArqERRRetorno);
                oAux.DeletarArquivo(ArqXMLRetorno);
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// VerConsultaCadastroClass
        /// </summary>
        /// <param name="XmlNfeDadosMsg"></param>
        /// <returns></returns>
        public object VerConsultaCadastro(string XmlNfeDadosMsg)
        {
            Auxiliar oAux   = new Auxiliar();
            GerarXML oGerar = new GerarXML(Emp);

            string ArqXMLRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" +
                                   oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.ConsCad) +
                                   "-ret-cons-cad.xml";

            string ArqERRRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" +
                                   oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.ConsCad) +
                                   "-ret-cons-cad.err";

            object vRetorno = null;

            try
            {
                vRetorno = EnviaArquivoERecebeResposta(2, ArqXMLRetorno, ArqERRRetorno);
                //vRetorno = ProcessaConsultaCadastroClass(@"c:\usr\nfe\uninfe\modelos\retorno-cons-cad.txt");
            }
            finally
            {
                oAux.DeletarArquivo(ArqERRRetorno);
                oAux.DeletarArquivo(ArqXMLRetorno);
            }
            return(vRetorno);
        }
        /// <summary>
        /// Converter arquivos de NFe no formato TXT para XML
        /// </summary>
        /// <by>Wandrey Mundin Ferreira</by>
        /// <date>03/069/2009</date>
        protected void ConvTXT(string vPasta)
        {
            int      emp  = new FindEmpresaThread(Thread.CurrentThread).Index;
            Auxiliar oAux = new Auxiliar();

            List <string> lstArquivos = this.ArquivosPasta(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/, "*-nfe.txt");

            for (int i = 0; i < lstArquivos.Count; i++)
            {
                if (Auxiliar.FileInUse(lstArquivos[i]))
                {
                    continue;
                }

                UnitxtTOxmlClass oUniTxtToXml = new UnitxtTOxmlClass();
                string           ccMessage    = string.Empty;
                string           ccExtension  = "-nfe.err";

                try
                {
                    ///
                    /// exclui o arquivo de erro
                    ///
                    oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension));
                    oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + "-nfe-ret.xml"));
                    oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaErro + "\\" + Path.GetFileName(lstArquivos[i]));
                    ///
                    /// exclui o arquivo TXT original
                    ///
                    oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt");

                    ///
                    /// processa a conversão
                    ///
                    oUniTxtToXml.Converter(lstArquivos[i], vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/);

                    //Deu tudo certo com a conversão?
                    if (string.IsNullOrEmpty(oUniTxtToXml.cMensagemErro))
                    {
                        ///
                        /// danasa 8-2009
                        ///
                        if (oUniTxtToXml.cRetorno.Count == 0)
                        {
                            ccMessage = "cStat=02\r\n" +
                                        "xMotivo=Falha na conversão. Sem informações para converter o arquivo texto";

                            oAux.MoveArqErro(lstArquivos[i], ".txt");
                        }
                        else
                        {
                            ///
                            /// salva o arquivo texto original
                            ///
                            FileInfo otxtArquivo = new FileInfo(lstArquivos[i]);
                            if (vPasta.Equals(Empresa.Configuracoes[emp].PastaEnvio))
                            {
                                string vvNomeArquivoDestino = Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt";
                                otxtArquivo.MoveTo(vvNomeArquivoDestino);
                            }
                            ccExtension = "-nfe.txt";
                            ccMessage   = "cStat=01\r\n" +
                                          "xMotivo=Convertido com sucesso. Foi(ram) convertida(s) " + oUniTxtToXml.cRetorno.Count.ToString() + " nota(s) fiscal(is)";

                            foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno)
                            {
                                ///
                                /// monta o texto que será gravado no arquivo de aviso ao ERP
                                ///
                                ccMessage += Environment.NewLine +
                                             "Nota fiscal: " + txtClass.NotaFiscal.ToString("000000000") +
                                             " Série: " + txtClass.Serie.ToString("000") +
                                             " - ChaveNFe: " + txtClass.ChaveNFe;
                                ///
                                /// move o arquivo XML criado na pasta Envio\Convertidos para a pasta Envio
                                /// ou
                                /// move o arquivo XML criado na pasta Validar\Convertidos para a pasta Validar
                                ///
                                FileInfo oArquivo = new FileInfo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName);

                                string vNomeArquivoDestino = vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\" + txtClass.XMLFileName;
                                ///
                                /// excluo o XML se já existe
                                ///
                                oAux.DeletarArquivo(vNomeArquivoDestino);

                                ///
                                /// move o arquivo da pasta "Envio\Convertidos" para a pasta "Envio"
                                /// ou
                                /// move o arquivo da pasta "Validar\Convertidos" para a pasta "Validar"
                                ///
                                oArquivo.MoveTo(vNomeArquivoDestino);
                            }
                        }
                    }
                    else
                    {
                        ///
                        /// danasa 8-2009
                        ///
                        ccMessage = "cStat=99\r\n" +
                                    "xMotivo=Falha na conversão\r\n" +
                                    "MensagemErro=" + oUniTxtToXml.cMensagemErro;
                    }
                }
                catch (Exception ex)
                {
                    ccMessage   = ex.Message;
                    ccExtension = "-nfe.err";
                }

                if (!string.IsNullOrEmpty(ccMessage))
                {
                    oAux.MoveArqErro(lstArquivos[i], ".txt");
                    ///
                    /// exclui todos os XML gerados na pasta Enviados\convertidos
                    ///
                    foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno)
                    {
                        oAux.DeletarArquivo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName);
                    }
                    ///
                    /// danasa 8-2009
                    ///
                    /// Gravar o retorno para o ERP em formato TXT com o erro ocorrido
                    ///
                    oAux.GravarArqErroERP(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension, ccMessage);
                }
            }
        }
示例#4
0
        /// <summary>
        /// Metodo responsável por invocar o serviço do WebService do SEFAZ
        /// </summary>
        /// <param name="oWSProxy">Objeto da classe construida do WSDL</param>
        /// <param name="oServicoWS">Objeto da classe de envio do XML</param>
        /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param>
        /// <param name="oCabecMsg">Objeto da classe de cabecalho do serviço</param>
        /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param>
        /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param>
        /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param>
        /// <remarks>
        /// Autor: Wandrey Mundin Ferreira
        /// Data: 17/03/2010
        /// </remarks>
        public void Invocar(WebServiceProxy oWSProxy,
                            object oServicoWS,
                            string cMetodo,
                            object oCabecMsg,
                            object oServicoNFe,
                            string cFinalArqEnvio,
                            string cFinalArqRetorno)
        {
            int emp = new FindEmpresaThread(Thread.CurrentThread).Index;

            XmlDocument docXML = new XmlDocument();

            // Definir o tipo de serviço da NFe
            Type typeServicoNFe = oServicoNFe.GetType();

            // Resgatar o nome do arquivo XML a ser enviado para o webservice
            string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("vXmlNfeDadosMsg", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null));

            try
            {
                //Verificar se o certificado digital está vencido, se tiver vai forçar uma exceção
                CertificadoDigital CertDig = new CertificadoDigital();
                CertDig.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado);

                if (CertDig.lLocalizouCertificado == true)
                {
                    if (DateTime.Compare(DateTime.Now, CertDig.dValidadeFinal) > 0)
                    {
                        throw new ExceptionInvocarObjeto(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")");
                    }
                }

                // Exclui o Arquivo de Erro
                oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err");

                // Validar o Arquivo XML
                string cResultadoValidacao = oAux.ValidarArqXML(XmlNfeDadosMsg);
                if (cResultadoValidacao != "")
                {
                    throw new Exception(cResultadoValidacao);
                }

                // Montar o XML de Lote de envio de Notas fiscais
                docXML.Load(XmlNfeDadosMsg);
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            // Definir Proxy
            if (ConfiguracaoApp.Proxy)
            {
                oWSProxy.SetProp(oServicoWS, "Proxy", Auxiliar.DefinirProxy());
            }

            // Limpa a variável de retorno
            XmlNode XmlRetorno;

            //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009
            //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento.
            oWSProxy.SetProp(oServicoWS, "Timeout", 60000);

            try
            {
                //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP
                if (!InternetCS.IsConnectedToInternet())
                {
                    //Registrar o erro da validação para o sistema ERP
                    throw new ExceptionInvocarObjeto(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg);
                }

                //Atribuir conteúdo para uma propriedade da classe NfeStatusServico2
                if (cMetodo.Substring(0, 3).ToLower() == "sce") // DPEC
                {
                    oWSProxy.SetProp(oServicoWS, "sceCabecMsgValue", oCabecMsg);
                }
                else
                {
                    switch (ConfiguracaoApp.TipoAplicativo)
                    {
                    case UniNFeLibrary.Enums.TipoAplicativo.Cte:
                        oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", oCabecMsg);
                        break;

                    case UniNFeLibrary.Enums.TipoAplicativo.Nfe:
                        oWSProxy.SetProp(oServicoWS, "nfeCabecMsgValue", oCabecMsg);
                        break;

                    default:
                        break;
                    }
                }


                try
                {
                    //Invocar o membro
                    XmlRetorno = (XmlNode)oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { docXML });
                }
                catch (Exception ex)
                {
                    if (cMetodo.Substring(0, 3).ToLower() == "sce") //danasa 21/10/2010
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWSDPEC, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }

                    //Se for XML da NFe a mensagem é padronizada, caso contrário é uma mensagem geral. Wandrey 25/02/2011
                    if (cMetodo == "nfeRecepcaoLote2")
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlNFeWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }
                    else
                    {
                        throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message);
                    }
                }

                //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz
                typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { XmlRetorno.OuterXml });

                // Registra o retorno de acordo com o status obtido
                if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty)
                {
                    typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", cFinalArqRetorno + ".xml" });
                }
            }
            catch (ExceptionEnvioXML ex)
            {
                throw (ex);
            }
            catch (ExceptionInvocarObjeto ex)
            {
                throw (ex);
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }