Beispiel #1
0
        /// <summary>
        /// Envia nota fiscal atravéz do WebService
        /// </summary>
        /// <param name="ilNotas_Fiscais">IList<Dados_Arquivos_NFe> com todas as notas para exportação.</param>
        /// <param name="sFolder">string com a Path completa para envio da NF-e.</param>
        public void Enviar_NFe(IList <CompSoft.NFe.Dados_Arquivo_NFe> ilNotas_Fiscais, string sFolder)
        {
            CompSoft.Tools.frmWait f = new CompSoft.Tools.frmWait("Aguarde, buscando informações no banco de dados.");
            f.Show();

            //-- Busca dados para geração da NF-e
            ERP.NFe.GerarDadosNFe dados_NFe = new ERP.NFe.GerarDadosNFe();
            dados_NFe.Gerar_Dados_NFe(ilNotas_Fiscais);

            f.Mensagem = "Aguarde, gerando arquivos XML da NF-e.";

            //-- Gera NF-e em uma pasta especifica para envio ao cliente.
            ERP.NFe.XML_NFe nfe = new ERP.NFe.XML_NFe(sFolder, dados_NFe.DataSet_NFe, ilNotas_Fiscais);
            nfe.Gerar_XML_NFe();

            f.Progresso        = true;
            f.Maximo_Progresso = ilNotas_Fiscais.Count;
            f.Mensagem         = "Aguarde, o sistema está assinando, transfêrindo e imprimindo o DANFE das notas fiscais autorizadas.";

            //-- Instancia classe de tratamento do WebService NF-e
            //-- Verifica se o WebService está ativo.
            NFeWebService wb_Nfe = new NFeWebService();

            if (wb_Nfe.Status_WebService(ilNotas_Fiscais[0]))
            {
                //-- Assina o XML.
                foreach (Dados_Arquivo_NFe daNFe in ilNotas_Fiscais)
                {
                    //-- Assina NF-e
                    CompSoft.NFe.AssinaXML assinar = new CompSoft.NFe.AssinaXML();
                    assinar.AssinarArquivoXML(daNFe.Arquivo_XML, "infNFe", this.Retorna_SerialNumber(daNFe.Empresa));

                    //-- Envia o Lote da NF-e.
                    this.SalvaXML_DB(daNFe, false);
                    XmlDocument doc       = wb_Nfe.Enviar_LoteNFe(daNFe);
                    int         iAguardar = this.Trata_Arquivo_Retorno_NFe(doc, daNFe); //-- Faz o tratamento dos dados e envia para o banco de dados.

                    //-- Aguarda 3 vezes o tempo necessário para garentir a recepção do retorno dos dados.
                    System.Threading.Thread.Sleep(5000);

                    //-- Captura o resultado de processamento.
                    this.Resultado_Processamento_NFe(daNFe);

                    //-- avança um na barra de progresso.
                    f.Atual_Progresso++;
                }
            }
            else
            {
                MsgBox.Show("O WebService está fora do ar, tente novamente mais tarde."
                            , "Atenção"
                            , System.Windows.Forms.MessageBoxButtons.OK
                            , System.Windows.Forms.MessageBoxIcon.Error);
            }

            f.Close();
            f.Dispose();
        }
Beispiel #2
0
        /// <summary>
        /// Captura o resultado do processamento do lote na Secretária da Fazenda.
        /// </summary>
        /// <param name="daNFe">Dados_Arquivo_NFe</param>
        internal void Resultado_Processamento_NFe(Dados_Arquivo_NFe daNFe)
        {
            bool          bImprimiDanfe = false;
            NFeWebService wb_NFe        = new NFeWebService();

            //-- Verifica se o arquivo XML da NF-e existe, caso não exista o sistema salva o existente no DB para envio ao cliente.
            this.Verifica_XML_Existe(daNFe);

            //-- Busca o resultado do processamento do lote.
            XmlDocument doc = wb_NFe.Resultado_Processamento_NFe(daNFe);

            //-- Verifica se o status é regsitrado como lote processado.
            if (doc.GetElementsByTagName("cStat")[0].InnerText.Equals("104"))
            {
                string sCodigo_Mensagem_Retorno = doc.GetElementsByTagName("cStat")[1].InnerText;
                string sMensagem_Retorno        = doc.GetElementsByTagName("xMotivo")[1].InnerText;

                if (!sCodigo_Mensagem_Retorno.Trim().Equals("999"))
                {
                    sMensagem_Retorno = "NULL";
                }
                else
                {
                    sMensagem_Retorno = "'" + sMensagem_Retorno + "'";
                }

                //-- Caso a mensagem de retorno for de autorização de uso.
                string sProt = string.Empty;
                if (sCodigo_Mensagem_Retorno.Equals("100"))
                {
                    bImprimiDanfe = true;
                }

                //-- Verifica se a mensagem de erro existe e inclui
                bool bExiste_MensRet = (int.Parse(SQL.ExecuteScalar(string.Format("select count(codigo_mensagem_retorno) from dbo.Mensagens_Retorno_NFe where codigo_mensagem_retorno = {0}"
                                                                                  , sCodigo_Mensagem_Retorno)).ToString()) > 0);

                if (!bExiste_MensRet)
                {
                    //-- inclui a mensagem.
                    SQL.Execute(string.Format("insert Mensagens_Retorno_NFe values({0}, '{1}')"
                                              , sCodigo_Mensagem_Retorno
                                              , doc.GetElementsByTagName("xMotivo")[1].InnerText.Replace("'", "")));
                }

                //-- Monta query para atualização do lote da NF-e
                StringBuilder sb = new StringBuilder();
                sb.Append("update notas_fiscais_lotes set ");
                sb.AppendFormat("       Data_Processamento = '{0}'", doc.GetElementsByTagName("dhRecbto")[0].InnerText.Replace("T", " ").Replace("-", "").Substring(0, 17));
                sb.AppendFormat("     , Codigo_Mensagem_Retorno_NFe = {0}", sCodigo_Mensagem_Retorno);
                sb.AppendFormat("     , Mensagem_retorno_NFe = {0}", sMensagem_Retorno);
                sb.Append("     , Retorno_Capturado = 1");
                sb.AppendFormat("{0}", sProt);
                sb.AppendFormat(" where nota_fiscal_lote = {0}", daNFe.Cod_Nota_Fiscal_Lote);
                SQL.ExecuteNonQuery(sb.ToString());

                //-- Marca a NF como exportada.
                if (bImprimiDanfe)
                {
                    //-- Atualiza o número do protocolo de autenticação
                    sb.Remove(0, sb.Length);
                    sb.AppendLine("update notas_fiscais set ");
                    sb.AppendFormat("   NFe_Protocolo = '{0}'\r\n", doc.GetElementsByTagName("nProt")[0].InnerText);
                    sb.AppendFormat(" , NFe_Protocolo_Data = '{0}'\r\n", doc.GetElementsByTagName("dhRecbto")[0].InnerText.Replace("T", " ").Replace("-", "").Substring(0, 17));
                    sb.AppendFormat(" where Nota_Fiscal = {0}", daNFe.Nota_Fiscal);
                    SQL.ExecuteNonQuery(sb.ToString());

                    //-- Salva Xml no Banco de dados.
                    this.SalvaXML_DB(daNFe, true);
                }
            }
            else
            {
                string sCodigo_Mensagem_Retorno = doc.GetElementsByTagName("cStat")[0].InnerText;
                string sMensagem_Retorno        = doc.GetElementsByTagName("xMotivo")[0].InnerText;

                if (!sCodigo_Mensagem_Retorno.Trim().Equals("999"))
                {
                    sMensagem_Retorno = "NULL";
                }
                else
                {
                    sMensagem_Retorno = "'" + sMensagem_Retorno + "'";
                }

                //-- Atualiza mensagens do lote da NF-e
                StringBuilder sb = new StringBuilder();
                sb.Append("update notas_fiscais_lotes set ");
                sb.AppendFormat("       Codigo_Mensagem_Retorno_NFe = {0}", sCodigo_Mensagem_Retorno);
                sb.AppendFormat("     , Mensagem_retorno_NFe = {0}", sMensagem_Retorno);
                sb.Append("     , Retorno_Capturado = 1");
                sb.AppendFormat(" where nota_fiscal_lote = {0}", daNFe.Cod_Nota_Fiscal_Lote);
                SQL.ExecuteNonQuery(sb.ToString());
            }

            //-- Imprimi danfe.
            if (bImprimiDanfe)
            {
                //-- Faz a impressão do DANFE
                Impressao_Danfe imp_danfe;
                imp_danfe.Imprimir_Danfe(daNFe, false);

                //-- Envia a NF-e por e-mail
                Enviar_XML_Email envMail_NFe;
                envMail_NFe.Enviar_XML(daNFe);
            }
        }