Пример #1
0
        private void cmdAtualizarSecretaria_Click(object sender, EventArgs e)
        {
            if (chkNFp.Checked)
            {
                NFPaulista.NFP_TrataWS ws = new ERP.NFPaulista.NFP_TrataWS();

                IList <int> ilLote = new List <int>();
                ilLote.Add(Convert.ToInt32(txtLote.Text));
                ws.Buscar_Retorno_Lote(ilLote);
            }

            if (chkNFe.Checked)
            {
                //-- captura datarowview atual selecionado.
                DataRowView row = (DataRowView)BindingSource[MainTabela].Current;

                //-- Alimenta variaveis necessárias para trabalho.
                Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe();
                daNFe.Carregar_Dados(Convert.ToInt32(row["nota_fiscal_lote"]));

                //-- Instancia WebService
                ERP.NFe.NFe nfe = new ERP.NFe.NFe();
                nfe.Resultado_Processamento_NFe(daNFe);
            }

            Atualizar_Query_Atual();
        }
Пример #2
0
        /// <summary>
        /// Verifica se o arquivo fisico XML existe, caso não exista o sistema busca o XML e salva o do banco de dados.
        /// </summary>
        /// <param name="daNFe">Dados_Arquivo_NFe contendo as informações da NF-e</param>
        private void Verifica_XML_Existe(Dados_Arquivo_NFe daNFe)
        {
            System.IO.FileInfo fi = new System.IO.FileInfo(daNFe.Arquivo_XML);
            if (!fi.Exists)
            {
                //-- Busca no bando de dados as informações.
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("select nfe_documentoxml from notas_fiscais");
                sb.AppendFormat("   where nota_fiscal = {0}", daNFe.Nota_Fiscal);
                string sXML = SQL.ExecuteScalar(sb.ToString()).ToString();

                //-- Verifica se existe o conteudo XML.
                if (!string.IsNullOrEmpty(sXML))
                {
                    if (!System.IO.Directory.Exists(fi.DirectoryName))
                    {
                        System.IO.Directory.CreateDirectory(fi.DirectoryName);
                    }

                    //-- Salva o arquivo em disco no mesmo diretório onde o arquivo ele foi criado originalmente
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(daNFe.Arquivo_XML);
                    sw.Write(sXML);
                    sw.Close();
                    sw.Dispose();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Salva o arquivo XML no banco de dados na tabela de notas fiscais.
        /// </summary>
        /// <param name="daNFe"></param>
        private void SalvaXML_DB(Dados_Arquivo_NFe daNFe, bool bMarca_Exportado)
        {
            if (System.IO.File.Exists(daNFe.Arquivo_XML))
            {
                //-- Le o arquivo XML e aloca em memoria.
                System.IO.StreamReader sr = new System.IO.StreamReader(daNFe.Arquivo_XML);
                string sXML = sr.ReadToEnd();
                sr.Close();
                sr.Dispose();

                //-- Declara parametros para inclusão.
                IList <System.Data.SqlClient.SqlParameter> ilParameters = new List <System.Data.SqlClient.SqlParameter>();

                System.Data.SqlClient.SqlParameter p = new System.Data.SqlClient.SqlParameter("@docxml", System.Data.SqlDbType.Text);
                p.Value = sXML;
                ilParameters.Add(p);

                p       = new System.Data.SqlClient.SqlParameter("@notafiscal", System.Data.SqlDbType.Int);
                p.Value = daNFe.Nota_Fiscal;
                ilParameters.Add(p);

                //-- Indica se a nota será marcada como exportada.
                string sQuery            = "update notas_fiscais set nfe_documentoxml = @docxml {0} where nota_fiscal = @notafiscal";
                string sMarca_Exportacao = string.Empty;
                if (bMarca_Exportado)
                {
                    sMarca_Exportacao = ", exportacao_NFe = 1";
                }

                sQuery = string.Format(sQuery, sMarca_Exportacao);

                //-- executa o comando.
                SQL.Execute(sQuery, ilParameters);
            }
        }
Пример #4
0
        private void cmdCartaCorrecao_Click(object sender, EventArgs e)
        {
            DataRowView row = (DataRowView)BindingSource[MainTabela].Current;
            IList <Dados_Arquivo_NFe> ilNotas = new List <Dados_Arquivo_NFe>();

            Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe();

            daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_Fiscal_Lote"]));

            ilNotas.Add(daNFe);

            ERP.NFe.NFe nfe = new ERP.NFe.NFe();
            nfe.CartaCorrecao_NFe(ilNotas);

            Atualizar_Query_Atual();

            //-- Atualiza

            //-- Exclui o titulo a receber.
            Funcoes func;

            if (!string.IsNullOrEmpty(txtProtocoloCancelamento.Text) && Convert.ToBoolean(func.Busca_Propriedade("Gera_Consiliacao_Automatica")))
            {
                Financeiro.ConsiliacaoFinanceira cf = new Financeiro.ConsiliacaoFinanceira();
                cf.Excluir_ContaReceber(daNFe.Nota_Fiscal);
            }
        }
Пример #5
0
        /// <summary>
        /// Consulta situação atual da NF-e na Secretária da Fazenda.
        /// </summary>
        /// <param name="daNFe">Dados_Arquivo_NFe com todos os paramentros necessários para NF-e</param>
        /// <returns>XmlDocument com o resultado da pesquisa.</returns>
        public XmlDocument Consulta_NFe(Dados_Arquivo_NFe daNFe)
        {
            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeConsultaProtocolo, daNFe.Estado_Emissor);
            nfeconsultaprotocolo4.NFeConsultaProtocolo4 nfe = new nfeconsultaprotocolo4.NFeConsultaProtocolo4();

            //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço
            nfe.Url = doc.Url_WebService;

            //-- Encontra o serial number do Certificado e adiciona ao web service.
            nfe.ClientCertificates.Add(Funcoes_NFe.Certificado_Digital(daNFe.Empresa));

            //-- Cria o XMl para envio.
            StringBuilder sb = new StringBuilder();

            sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consSitNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=");
            sb.Append('"');
            sb.Append(doc.Versao_Dados);
            sb.Append('"');
            sb.Append("><tpAmb>");
            sb.Append((int)daNFe.Ambiente);
            sb.Append("</tpAmb><xServ>CONSULTAR</xServ><chNFe>");
            sb.Append(daNFe.Chave_Acesso);
            sb.Append("</chNFe></consSitNFe>");

            //-- Verifica status do serviço
            XmlNode     sRetornoXML = nfe.nfeConsultaNF(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);
            XmlDocument xml         = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml);

            return(xml);
        }
Пример #6
0
        /// <summary>
        /// Envia arquivo de lote de NF-e
        /// </summary>
        /// <param name="daNFe">classe que contem todos os parametros do arquivo XML</param>
        /// <returns>XMLDocument com o recibo de envio</returns>
        public XmlDocument Enviar_LoteNFe(Dados_Arquivo_NFe daNFe)
        {
            NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeRecepcao, daNFe.Estado_Emissor);

            var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa);

            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            autorizeNFE.NFeAutorizacao4 nfe = new autorizeNFE.NFeAutorizacao4();
            nfe.Url = doc.Url_WebService; //--"https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx";
            nfe.ClientCertificates.Add(certificado);
            nfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;

            //-- Captura o XML do arquivo.
            XmlDocument xml = new XmlDocument();

            xml.Load(daNFe.Arquivo_XML);

            //-- Gera o número do lote.
            CompSoft.compFrameWork.Funcoes func;
            string sNum_Lote_NFe = func.Contador("IdLote_NFe", true);

            daNFe.Numero_Lote = Convert.ToInt32(sNum_Lote_NFe);

            ////-- Gera cabeçalho da NF-e
            //NFeRecepcao2.nfeCabecMsg cabecMsg = new NFeRecepcao2.nfeCabecMsg();
            //cabecMsg.cUF = daNFe.Codigo_Estado_Emissor.ToString();
            //cabecMsg.versaoDados = doc.Versao_Dados;
            //nfe.nfeCabecMsgValue = cabecMsg;

            //-- Gera capa do processo do lote
            StringBuilder sb = new StringBuilder();

            sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><enviNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=");
            sb.Append('"');
            sb.Append(doc.Versao_Dados);
            sb.Append('"');
            sb.Append("><idLote>");
            sb.Append(sNum_Lote_NFe);
            sb.Append("</idLote>");
            sb.Append("<indSinc>0</indSinc>");
            sb.Append(xml.GetElementsByTagName("NFe")[0].OuterXml);
            sb.Append("</enviNFe>");

            //-- Faz a comunicação com o servidor.
            XmlNode sRetorno_XML = nfe.nfeAutorizacaoLote(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);

            //-- XML de retorno.
            XmlDocument xml_Ret = Funcoes_NFe.StringXmlToXMLDocument(sRetorno_XML.OuterXml);

            return(xml_Ret);
        }
Пример #7
0
        public void Imprimir_Danfe(Dados_Arquivo_NFe daNFe, bool bPreview)
        {
            ERP.NFe.GerarDadosNFe gd = new GerarDadosNFe();

            IList <Dados_Arquivo_NFe> il = new List <Dados_Arquivo_NFe>();

            il.Add(daNFe);
            gd.Gerar_Dados_NFe(il);

            //-- Faz a impressão do danfe.
            ERP.Reports.rDanfe r = new ERP.Reports.rDanfe(gd.DataSet_NFe);
            r.PrintingSystem.StartPrint += new DevExpress.XtraPrinting.PrintDocumentEventHandler(PrintingSystem_StartPrint);
            CompSoft.compFrameWork.Impressoras imp;
            if (bPreview)
            {
                r.ShowPreviewDialog();
            }
            else
            {
                r.Print(imp.Impressora_Padrao);
            }

            //-- Cria diretório e salva em PDF.
            if (!string.IsNullOrEmpty(daNFe.Arquivo_XML))
            {
                System.IO.FileInfo fi       = new System.IO.FileInfo(daNFe.Arquivo_XML);
                string             sPathPDF = fi.DirectoryName;
                if (!sPathPDF.EndsWith(@"\"))
                {
                    sPathPDF += @"\";
                }

                sPathPDF += @"PDF\";

                System.IO.DriveInfo di = new System.IO.DriveInfo(sPathPDF.Substring(0, 1));
                if (di.IsReady)
                {
                    if (!System.IO.Directory.Exists(sPathPDF))
                    {
                        System.IO.Directory.CreateDirectory(sPathPDF);
                    }

                    string sFile = gd.DataSet_NFe.Tables["Notas_Fiscais"].Rows[0]["Numero_nota"].ToString();
                    sFile += ".pdf";

                    //-- Exporta em PDF.
                    r.ExportToPdf(sPathPDF + sFile);
                }
            }
        }
Пример #8
0
        private void cmdImprimirDANFE_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(cboCodMensagem_NFe.SelectedValue) == 100)
            {
                foreach (DataRow row in DataSetLocal.Tables["Notas_Fiscais_Lotes_Itens"].Select())
                {
                    Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(Convert.ToInt32(row["Nota_Fiscal"]));
                    daNFe.Arquivo_XML = txtArquivo.Text;

                    ERP.NFe.Impressao_Danfe imp;
                    imp.Imprimir_Danfe(daNFe, true);
                }
            }
        }
Пример #9
0
        private void cmdBuscarStatusNFe_Click(object sender, EventArgs e)
        {
            DataRowView row = (DataRowView)BindingSource[MainTabela].Current;
            IList <Dados_Arquivo_NFe> ilNotas = new List <Dados_Arquivo_NFe>();

            Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe();

            daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_Fiscal_Lote"]));

            ilNotas.Add(daNFe);

            ERP.NFe.NFe nfe = new ERP.NFe.NFe();
            nfe.Consultar_Situacao_NFe(ilNotas);

            Atualizar_Query_Atual();
        }
Пример #10
0
        private void cmdEnviarXMLEmail_Click(object sender, EventArgs e)
        {
            frmWait f = new frmWait("Aguarde, enviando e-mail com NF-e em anexo...", frmWait.Tipo_Imagem.Informacao);

            foreach (DataRow row in this.DataSetLocal.Tables["Notas_Fiscais_Lotes_Itens"].Select())
            {
                Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe();
                daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_fiscal_Lote"]));

                ERP.NFe.Enviar_XML_Email envMail_Nfe;
                envMail_Nfe.Enviar_XML(daNFe);
            }

            f.Close();
            f.Dispose();
        }
Пример #11
0
        /// <summary>
        /// Verifica se o WebService está ativo
        /// </summary>
        /// <param name="daNFe">Dados da NF-e para consuta do status do Webservice.</param>
        /// <returns>true/false Indicando se o serviço está Ativo</returns>
        public bool Status_WebService(Dados_Arquivo_NFe daNFe)
        {
            bool bRetorno = false;

            try
            {
                compFrameWork.Funcoes   func;
                NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeStatusServico, daNFe.Estado_Emissor);

                nfestatusservico4.NFeStatusServico4 nfe_Status = new nfestatusservico4.NFeStatusServico4();
                nfe_Status.Url = doc.Url_WebService;

                var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa);
                nfe_Status.ClientCertificates.Add(certificado);
                //nfe_Status.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36";

                //-- Cria o XMl para envio.
                StringBuilder sb = new StringBuilder();
                sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=");
                sb.Append('"');
                sb.Append(doc.Versao_Dados);
                sb.Append('"');
                sb.Append("><tpAmb>");
                sb.Append(func.Busca_Propriedade("Ambiente_NFe"));
                sb.Append("</tpAmb><cUF>");
                sb.Append(daNFe.Codigo_Estado_Emissor);
                sb.Append("</cUF><xServ>STATUS</xServ></consStatServ>");

                //-- Verifica status do serviço
                XmlNode     sRetornoXML = nfe_Status.nfeStatusServicoNF(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);
                XmlDocument xml         = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml);

                if (xml.GetElementsByTagName("cStat")[0].InnerText == "107")
                {
                    bRetorno = true;
                }
            }
            finally { }

            return(bRetorno);
        }
Пример #12
0
        /// <summary>
        /// Captura o retorno do processamento do lote da NF-e
        /// </summary>
        /// <param name="daNFe">Dados_Arquivo_NFe com os parametros da NF-e</param>
        /// <returns>XML com o resultado do processamento</returns>
        public XmlDocument Resultado_Processamento_NFe(Dados_Arquivo_NFe daNFe)
        {
            NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeRetRecepcao, daNFe.Estado_Emissor);

            var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa);

            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            nferetautorizacao4.NFeRetAutorizacao4 nfe = new nferetautorizacao4.NFeRetAutorizacao4();
            nfe.Url = doc.Url_WebService;
            nfe.ClientCertificates.Add(certificado);
            nfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;

            //-- Consulta de dados.
            StringBuilder sb = new StringBuilder();

            sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consReciNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=");
            sb.Append('"');
            sb.Append(doc.Versao_Dados);
            sb.Append('"');
            sb.Append("><tpAmb>");
            sb.Append((int)daNFe.Ambiente);
            sb.Append("</tpAmb><nRec>");
            sb.Append(daNFe.Numero_Recibo);
            sb.Append("</nRec></consReciNFe>");

            //-- Faz a comunicação com o servidor.
            XmlNode sRetorno_XML = nfe.nfeRetAutorizacaoLote(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);

            //-- XML de retorno.
            XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetorno_XML.OuterXml);

            //-- Salva resultado do processamento no XML da NF-e.
            this.Salva_XML_Envio_Cliente(daNFe.Arquivo_XML, xml);

            return(xml);
        }
Пример #13
0
        public XmlDocument CartaCorrecao_NFe(Dados_Arquivo_NFe daNFe)
        {
            if (string.IsNullOrEmpty(daNFe.Texto_Carta_Correcao))
            {
                MessageBox.Show("O Texto da carta de correção não foi definido, por favor, edita a NFe e tente novamente.");
                return(null);
            }

            NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.nfeRecepcaoEvento, daNFe.Estado_Emissor);
            nferecepcaoevento4.NFeRecepcaoEvento4 nfe = new nferecepcaoevento4.NFeRecepcaoEvento4();

            //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço
            nfe.Url = doc.Url_WebService;

            //-- Encontra o serial number do Certificado e adiciona ao web service.
            System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Funcoes_NFe.Certificado_Digital(daNFe.Empresa);
            nfe.ClientCertificates.Add(cert);

            int    contador = 1;
            string evento   = "110110";
            string _query   = string.Format("select Contador from Notas_Fiscais_Lotes_Contagens where Nota_Fiscal_Lote = {0} and Codigo_Evento = '{1}'"
                                            , daNFe.Cod_Nota_Fiscal_Lote, evento);

            object objContador = SQL.ExecuteScalar(_query);

            if (objContador == null)
            {
                _query = "insert Notas_Fiscais_Lotes_Contagens(Nota_Fiscal_Lote, Codigo_Evento, Contador) VALUES({0}, '{1}', {2})";
                _query = string.Format(_query, daNFe.Cod_Nota_Fiscal_Lote, evento, contador);
            }
            else
            {
                contador = Convert.ToInt32(objContador) + 1;
                _query   = "update Notas_Fiscais_Lotes_Contagens set Contador = {2} where Nota_Fiscal_Lote = {0} and Codigo_Evento = '{1}'";
                _query   = string.Format(_query, daNFe.Cod_Nota_Fiscal_Lote, evento, contador);
            }
            SQL.ExecuteNonQuery(_query);

            StringBuilder sb = new StringBuilder(5000);

            sb.Append("<envEvento versao=\"1.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
            sb.AppendFormat("<idLote>{0}</idLote>", daNFe.Numero_Lote);
            sb.Append("<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">");
            sb.AppendFormat("<infEvento Id=\"ID{1}{0}{2}\">", daNFe.Chave_Acesso, evento, contador.ToString().PadLeft(2, '0'));
            sb.Append("<cOrgao>35</cOrgao>");
            sb.AppendFormat("<tpAmb>{0}</tpAmb>", Convert.ToInt32(daNFe.Ambiente));
            sb.AppendFormat("<CNPJ>{0}</CNPJ>", daNFe.CNPJ);
            sb.AppendFormat("<chNFe>{0}</chNFe>", daNFe.Chave_Acesso);
            sb.AppendFormat("<dhEvento>{0:yyyy-MM-ddTHH:mm:sszzz}</dhEvento>", DateTime.Now);
            sb.AppendFormat("<tpEvento>{0}</tpEvento>", evento);
            sb.AppendFormat("<nSeqEvento>{0}</nSeqEvento>", contador);
            sb.Append("<verEvento>1.00</verEvento>");
            sb.Append("<detEvento versao=\"1.00\">");
            sb.Append("<descEvento>Carta de Correcao</descEvento>");

            sb.AppendFormat("<xCorrecao>{0}</xCorrecao>", daNFe.Texto_Carta_Correcao.Replace("\r\n", " "));

            sb.Append("<xCondUso>A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida.</xCondUso>");
            sb.Append("</detEvento>");
            sb.Append("</infEvento>");
            sb.Append("</evento>");
            sb.Append("</envEvento>");

            //-- Salva XML temporariamente em disco.
            string sFolder_temp = System.Windows.Forms.Application.StartupPath;

            if (!sFolder_temp.EndsWith(@"\"))
            {
                sFolder_temp += @"\";
            }

            sFolder_temp += @"tmp\";

            if (!System.IO.Directory.Exists(sFolder_temp))
            {
                System.IO.Directory.CreateDirectory(sFolder_temp);
            }

            string sFile_tmp = sFolder_temp + daNFe.Chave_Acesso + "-cartacor.xml";

            System.IO.StreamWriter sw = new System.IO.StreamWriter(sFile_tmp);
            sw.Write(sb.ToString());
            sw.Close();
            sw.Dispose();

            //-- Assina arquivo para envio.
            AssinaXML assinar = new AssinaXML();

            assinar.AssinarArquivoXML(sFile_tmp, "infEvento", cert.SerialNumber);

            //-- Limpa stringbuilder e carrega o arquivo assinado.
            System.IO.StreamReader sr = new System.IO.StreamReader(sFile_tmp);
            sb.Remove(0, sb.Length);
            sb.Append(sr.ReadToEnd()); //-- Adiciona o arquivo do inteiro no stringbuilder
            sr.Close();
            sr.Dispose();

            //-- apaga o arquivo criado.
            System.IO.Directory.Delete(sFolder_temp, true);

            //-- Verifica status do serviço
            XmlNode     sRetornoXML = nfe.nfeRecepcaoEvento(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);
            XmlDocument xml         = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml);

            return(xml);
        }
Пример #14
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);
            }
        }
Пример #15
0
        /// <summary>
        /// Envia o arquivo XML por e-mail para o cliente.
        /// </summary>
        /// <param name="daNFe">Dados_Arquivo_NFe com informações para envio do XML</param>
        public void Enviar_XML(Dados_Arquivo_NFe daNFe)
        {
            StringBuilder sb        = new StringBuilder(300);
            string        sFileName = Path.Combine(Path.GetTempPath(), "NFe" + daNFe.Chave_Acesso + ".xml");

            try
            {
                //-- Encontra o XML e salva em disco para envio.
                sb.AppendLine("SELECT NFe_DocumentoXML ");
                sb.AppendLine(" FROM notas_fiscais ");
                sb.AppendFormat(" WHERE Nota_Fiscal = {0}", daNFe.Nota_Fiscal);
                object       oDocXML = CompSoft.Data.SQL.ExecuteScalar(sb.ToString());
                StreamWriter sw      = new StreamWriter(sFileName);
                sw.Write(oDocXML.ToString());
                sw.Close();
                sw.Dispose();
            }
            catch { }

            //-- Encontra os dados para envio da NF-e (XML) por e-mail
            sb.Clear();
            sb.AppendLine("select ");
            sb.AppendLine("   NFE_EnvioXML_Ativar_Recurso");
            sb.AppendLine(" , NFE_EnvioXML_Servidor");
            sb.AppendLine(" , NFE_EnvioXML_Servidor_Porta");
            sb.AppendLine(" , NFE_EnvioXML_Servidor_Autenticacao");
            sb.AppendLine(" , NFE_EnvioXML_EMail");
            sb.AppendLine(" , NFE_EnvioXML_Usuario");
            sb.AppendLine(" , NFE_EnvioXML_Senha");
            sb.AppendLine(" , NFE_EnvioXML_Mensagem");
            sb.AppendLine(" , Razao_Social");
            sb.AppendLine(" from empresas ");
            sb.AppendLine(" where ");
            sb.AppendFormat("  empresa = {0}", daNFe.Empresa);
            DataTable dt = CompSoft.Data.SQL.Select(sb.ToString(), "x", false);

            foreach (DataRow row in dt.Select())
            {
                //-- Se o recurso de envio de mensagem por e-mail estivar ativo.
                if ((bool)row["NFE_EnvioXML_Ativar_Recurso"])
                {
                    sb.Remove(0, sb.Length);
                    sb.AppendLine("select cl.email as 'eMail_Cliente', t.email as 'eMail_Transp'");
                    sb.AppendLine(" from clientes cl");
                    sb.AppendLine("   inner join notas_fiscais nf on nf.cliente = cl.cliente");
                    sb.AppendLine("   inner join transportadoras t on t.transportadora = nf.transportadora");
                    sb.AppendFormat("  where nf.Nota_fiscal = {0}", daNFe.Nota_Fiscal);
                    DataRow row_mail = SQL.Select(sb.ToString(), "x", false).Rows[0];

                    object oEMail_Cli = row_mail[0]; //-- EMail Cliente
                    object oEMail_Tra = row_mail[1]; //-- EMail Transportadora

                    //-- Verifica se o e-mail não é nulo ou em branco.
                    if ((oEMail_Cli != DBNull.Value && !string.IsNullOrEmpty(oEMail_Cli.ToString()))
                        ||
                        (oEMail_Tra != DBNull.Value && !string.IsNullOrEmpty(oEMail_Tra.ToString())))
                    {
                        bool bContinuar = true;

                        //-- Verifica se o e-mail á valido.
                        Funcoes func;
                        if (!func.Validar_EMail(oEMail_Cli.ToString().Trim().ToLower()))
                        {
                            oEMail_Cli = string.Empty;
                        }

                        if (!func.Validar_EMail(oEMail_Tra.ToString().Trim().ToLower()))
                        {
                            oEMail_Tra = string.Empty;
                        }

                        if (string.IsNullOrEmpty(oEMail_Cli.ToString()) && string.IsNullOrEmpty(oEMail_Tra.ToString()))
                        {
                            bContinuar = false;
                        }

                        //-- Continuar a enviar e-mail.
                        if (bContinuar)
                        {
                            Email mail = new Email();
                            mail.Server = row["NFE_EnvioXML_Servidor"].ToString();
                            mail.Port   = Convert.ToInt32(row["NFE_EnvioXML_Servidor_Porta"]);

                            bool bRequer_Autenticacao = (bool)row["NFE_EnvioXML_Servidor_Autenticacao"];
                            if (bRequer_Autenticacao)
                            {
                                mail.Requer_Autenticacao = bRequer_Autenticacao;
                                mail.Usuario             = row["NFE_EnvioXML_Usuario"].ToString();
                                mail.Senha = row["NFE_EnvioXML_Senha"].ToString();
                            }

                            if (!string.IsNullOrEmpty(oEMail_Cli.ToString()))
                            {
                                foreach (string sMail in oEMail_Cli.ToString().Trim().ToLower().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                                {
                                    if (!string.IsNullOrEmpty(sMail))
                                    {
                                        mail.To.Add(sMail);
                                    }
                                }
                            }

                            if (!string.IsNullOrEmpty(oEMail_Tra.ToString()))
                            {
                                mail.To.Add(oEMail_Tra.ToString());
                            }

                            mail.From       = new System.Net.Mail.MailAddress(row["NFE_EnvioXML_EMail"].ToString());
                            mail.Prioridade = System.Net.Mail.MailPriority.High;

                            mail.Subject = string.Format("Envio de NF-e da {0}", row["Razao_social"].ToString());
                            mail.Body    = row["NFE_EnvioXML_Mensagem"].ToString();

                            //-- Adiciona arquivos em anexo.
                            List <string> ilFilesAttach = new List <string>();
                            ilFilesAttach.Add(sFileName);
                            mail.Arquivo_Anexo = ilFilesAttach;

                            //-- Envia e-mail.
                            mail.SendMail();
                        }
                    }
                }
            }
        }
Пример #16
0
        public XmlDocument Cancelar_NFe(Dados_Arquivo_NFe daNFe)
        {
            NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.nfeRecepcaoEvento, daNFe.Estado_Emissor);
            nferecepcaoevento4.NFeRecepcaoEvento4 nfe = new nferecepcaoevento4.NFeRecepcaoEvento4();

            //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço
            nfe.Url = doc.Url_WebService;

            //-- Encontra o serial number do Certificado e adiciona ao web service.
            System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Funcoes_NFe.Certificado_Digital(daNFe.Empresa);
            nfe.ClientCertificates.Add(cert);

            //nfeRecepcaoEvento.nfeCabecMsg cabecMsg  = new nfeRecepcaoEvento.nfeCabecMsg();
            //////-- Gera cabeçalho do cancelamento da NF-e
            ////NFeCancelamento2.nfeCabecMsg cabecMsg = new NFeCancelamento2.nfeCabecMsg();
            //cabecMsg.cUF = daNFe.Codigo_Estado_Emissor.ToString();
            //cabecMsg.versaoDados = doc.Versao_Dados;
            //nfe.nfeCabecMsgValue = cabecMsg;

            StringBuilder sb = new StringBuilder(5000);

            sb.Append("<envEvento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">");
            sb.AppendFormat("<idLote>{0}</idLote>", daNFe.Numero_Lote);
            sb.Append("<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">");
            sb.AppendFormat("<infEvento Id=\"ID110111{0}01\">", daNFe.Chave_Acesso);
            sb.Append("<cOrgao>35</cOrgao>");
            sb.AppendFormat("<tpAmb>{0}</tpAmb>", Convert.ToInt32(daNFe.Ambiente));
            sb.AppendFormat("<CNPJ>{0}</CNPJ>", daNFe.CNPJ);
            sb.AppendFormat("<chNFe>{0}</chNFe>", daNFe.Chave_Acesso);
            sb.AppendFormat("<dhEvento>{0:yyyy-MM-ddTHH:mm:sszzz}</dhEvento>", DateTime.Now);
            sb.Append("<tpEvento>110111</tpEvento>");
            sb.Append("<nSeqEvento>1</nSeqEvento>");
            sb.Append("<verEvento>1.00</verEvento>");
            sb.Append("<detEvento versao=\"1.00\">");
            sb.Append("<descEvento>Cancelamento</descEvento>");
            sb.AppendFormat("<nProt>{0}</nProt>", daNFe.Numero_Autorizacao_Uso);
            sb.Append("<xJust>Compra cancelada pelo cliente</xJust>");
            sb.Append("</detEvento>");
            sb.Append("</infEvento>");
            sb.Append("</evento>");
            sb.Append("</envEvento>");

            //-- Salva XML temporariamente em disco.
            string sFolder_temp = System.Windows.Forms.Application.StartupPath;

            if (!sFolder_temp.EndsWith(@"\"))
            {
                sFolder_temp += @"\";
            }

            sFolder_temp += @"tmp\";

            if (!System.IO.Directory.Exists(sFolder_temp))
            {
                System.IO.Directory.CreateDirectory(sFolder_temp);
            }

            string sFile_tmp = sFolder_temp + daNFe.Chave_Acesso + "-canc.xml";

            System.IO.StreamWriter sw = new System.IO.StreamWriter(sFile_tmp);
            sw.Write(sb.ToString());
            sw.Close();
            sw.Dispose();

            //-- Assina arquivo para envio.
            AssinaXML assinar = new AssinaXML();

            assinar.AssinarArquivoXML(sFile_tmp, "infEvento", cert.SerialNumber);

            //-- Limpa stringbuilder e carrega o arquivo assinado.
            System.IO.StreamReader sr = new System.IO.StreamReader(sFile_tmp);
            sb.Remove(0, sb.Length);
            sb.Append(sr.ReadToEnd()); //-- Adiciona o arquivo do inteiro no stringbuilder
            sr.Close();
            sr.Dispose();

            //-- apaga o arquivo criado.
            System.IO.Directory.Delete(sFolder_temp, true);

            //-- Verifica status do serviço
            XmlNode     sRetornoXML = nfe.nfeRecepcaoEvento(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement);
            XmlDocument xml         = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml);

            return(xml);
        }