예제 #1
0
        public void SalvarXMLCartaCorrecao()
        {
            WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaCartaCorrecao");

            _WorkFlowServico.AddEvento("INÍCIO PROCESSO");

            NFEHelper    nhp                 = new NFEHelper();
            string       XML                 = string.Empty;
            string       ChaveNfe            = string.Empty;
            int          CdNotaFiscalSaida   = 0;
            int          CdNotaFiscalSaidaCC = 0;
            int          StatusNfe           = 0;
            int          sequencial          = 0;
            MemoryStream oMemoryStream;
            XmlDocument  docProc;

            DataTable DTNfe                 = null;
            string    chaveNFE              = string.Empty;
            string    CaminhoXMLautorizado  = string.Empty;
            string    CaminhoArquivoRetorno = string.Empty;
            string    nomeArquivoProc       = string.Empty;
            string    nomeArquivo           = string.Empty;
            string    xmlAutorizado         = string.Empty;

            try
            {
                if (multiplasfiliais.Equals("TRUE"))
                {
                    DTNfe = nhp.CartaCorrecaoIntegracaoFilial(cdentifilial, datasource, schema);
                }
                else
                {
                    DTNfe = nhp.CartaCorrecaoIntegracao(datasource, schema);
                }

                if (DTNfe.Rows.Count > 0)
                {
                    _WorkFlowServico.AddEvento("QTDE NFS CC:" + DTNfe.Rows.Count.ToString());

                    foreach (DataRow dtrow in DTNfe.Rows)
                    {
                        XML = string.Empty;

                        docProc = new XmlDocument();

                        CdNotaFiscalSaida = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDA"]);

                        CdNotaFiscalSaidaCC = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDACC"]);

                        StatusNfe = Convert.ToInt32(dtrow["CDSTATUS"]);

                        sequencial = Convert.ToInt32(dtrow["SEQUENCIAL"]);

                        _WorkFlowServico.AddEvento(string.Format("NFS CC: {0} STATUS:{1}", CdNotaFiscalSaida, StatusNfe));

                        /*
                         *  0   Aguardando integração da NF-e
                         *  1   NF-e Integrada
                         *  2   Erro integração da NF-e
                         *  400	Carta de correção autorizada pela SEFAZ
                         *  402	Erro de integração de Carta de correção
                         *  499	Carta de correção NAO autorizada pela SEFAZ
                         *  401	Carta de correção integrada
                         */

                        string dtEmissao = string.Empty;

                        switch (StatusNfe)
                        {
                            #region Envio
                        case 0:     //ENVIO
                        {
                            XML = dtrow["XMLENVIO"].ToString();

                            _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO");
                            if (string.IsNullOrEmpty(XML))
                            {
                                throw new Exception("O XML NÃO FOI GERADO CD: " + CdNotaFiscalSaida.ToString());
                            }

                            oMemoryStream = Util.StringXmlToStream(XML);

                            //Validacao do XML
                            Util ut = new Util();
                            //ut.ValidaXMLNFE(XML.Trim(), pastaSchema);

                            if (string.IsNullOrEmpty(ut.MsgValidacaoXML))
                            {
                                _WorkFlowServico.AddEvento("SALVAR XML NA PASTA");
                                docProc.Load(oMemoryStream);
                                docProc.Save(string.Format("{0}\\{1}-env-cce.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()));

                                _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS CC: " + CdNotaFiscalSaidaCC.ToString());

                                //Atualiza o status da nfe para NF-e Integrada
                                nhp.UpdateStatusCC(CdNotaFiscalSaidaCC, 1, 401, datasource, schema);

                                _WorkFlowServico.AddEvento("NFS CC ATUALIZADA : " + CdNotaFiscalSaidaCC.ToString());

                                //log DE ENVIADO OK
                                _WorkFlowServico.AddEvento("NFS CC ENVIADA PARA SEFAZ: " + CdNotaFiscalSaidaCC.ToString());

                                //LOG DOC-e detalhamento da NFE
                                dtEmissao = DateTime.Now.ToString("dd/MM/yyyy");

                                nhp.InserirHistoricoItem(XML,
                                                         "",
                                                         "401",
                                                         "Carta de correção integrada",
                                                         CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce);
                            }
                            else
                            {
                                nhp.UpdateStatusCC(CdNotaFiscalSaidaCC, 2, 402, datasource, schema);
                            }

                            break;
                        }

                            #endregion
                            #region Retorno
                        case 1:
                        {
                            //35130314364911000102550010000005031000178455_01-procEventoNFe
                            string xmlAutorizacao = string.Empty;
                            //string xmlAutorizacaoCompleto = string.Empty;
                            // FileInfo fileAutorizacaoCompleto = null;
                            Util.RetEnvEvento oDadosRetEnv = new Util.RetEnvEvento();

                            List <Util.RetEnvEvento> lstArqRetProc = new List <Util.RetEnvEvento>();

                            //System.IO.DirectoryInfo dirInfo = new DirectoryInfo(DiretorioRetorno);
                            System.IO.DirectoryInfo dirInfoAuto = new DirectoryInfo(DiretorioAutorizados);

                            //System.IO.FileInfo[] ArquivosRetornoEnvio = dirInfo.GetFiles("*-ret-env-cce.xml", SearchOption.AllDirectories);

                            System.IO.FileInfo[] ArquivosRetornoAprovados = dirInfoAuto.EnumerateFiles("*-procEventoNFe.xml", SearchOption.AllDirectories).AsParallel().ToArray();


                            //Carregar a lista de arquivos de retorno
                            foreach (FileInfo fi in ArquivosRetornoAprovados.ToList())
                            {
                                _WorkFlowServico.AddEvento("LerArquivo " + fi.FullName);
                                xmlAutorizacao = Util.LerArquivo(fi.FullName);
                                //xmlAutorizacao = RJSOptimusUtil.RemoveCaracteresEspeciais(xmlAutorizacao, true, true);
                                _WorkFlowServico.AddEvento("RetornoEvento " + xmlAutorizacao);
                                oDadosRetEnv = Util.RetornoEvento(xmlAutorizacao, fi.Name, fi.FullName);
                                lstArqRetProc.Add(oDadosRetEnv);
                            }

                            //Lista de rejeições
                            //Processamento do Lote – o lote foi processado (cStat=128), a validação de cada evento do lote
                            List <Util.RetEnvEvento> lstRej = (from z in lstArqRetProc
                                                               where z.retEvento.chNfe == dtrow["NRNFECHAVE"].ToString() && z.retEvento.cStat != "128"
                                                               select z).ToList();
                            //Arquivo com aprovação
                            //Recebido pelo Sistema de Registro de Eventos, com vinculação do evento na NF-e, o
                            //Evento será armazenado no repositório do Sistema de Registro de Eventos com a vinculação do Evento à respectiva NF-e (cStat=135);
                            Util.RetEnvEvento drcAprov = (from z in lstArqRetProc
                                                          where z.retEvento.chNfe == dtrow["NRNFECHAVE"].ToString() && z.retEvento.cStat == "135" && z.retEvento.nSeqEvento == sequencial
                                                          select z).FirstOrDefault();

                            //Arquivo completo
                            //fileAutorizacaoCompleto = (from a in ArquivosRetornoAprovados
                            //                           where a.Name.Contains(dtrow["NRNFECHAVE"].ToString())
                            //                           select a).FirstOrDefault();
                            //Retorno aprovado pela sefaz

                            if (drcAprov != null)
                            {
                                _WorkFlowServico.AddEvento(string.Format("Nota fiscal nº: {0} dt sefaz:{1}-{2}-{3} Encontrou o retorno.", CdNotaFiscalSaida, drcAprov.retEvento.dhRegEvento, drcAprov.retEvento.cStat, drcAprov.retEvento.xMotivo));

                                //Ler o conteudo do arquivo
                                //xmlAutorizacao = Util.LerArquivo(string.Concat(DiretorioRetorno, "\\", nomeArquivoProc));
                                //xmlAutorizacao = Util.LerArquivo(drcAprov.CaminhoArquivo);
                                //Caminho fisico do arquivo
                                //CaminhoArquivoRetorno = drcAprov.CaminhoArquivo;

                                //DateTime dtReciboNf = Convert.ToDateTime(drcAprov.retEvento.dhRegEvento, new CultureInfo("pt-BR"));

                                //string DTYYYYMM_ = dtReciboNf.ToString("yyyyMM");

                                //if (fileAutorizacaoCompleto == null)
                                //{
                                //    _WorkFlowServico.AddEvento(string.Format("XML autorizado não encontrado {0}", fileAutorizacaoCompleto.FullName));
                                //}
                                //else
                                //{
                                _WorkFlowServico.AddEvento(string.Format("Status {0} da nota fiscal nº {1}", drcAprov.retEvento.cStat, CdNotaFiscalSaida));

                                //xmlAutorizacaoCompleto = Util.LerArquivo(fileAutorizacaoCompleto.FullName);

                                nhp.CartaCorrecaoUpdate(CdNotaFiscalSaidaCC, 400, Convert.ToInt32(drcAprov.retEvento.cStat), drcAprov.XMLaprovado, datasource, schema);

                                nhp.InserirHistoricoItem(drcAprov.XMLaprovado, drcAprov.retEvento.nProt, drcAprov.retEvento.cStat, drcAprov.retEvento.xMotivo, CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce);
                                //}
                            }
                            else         //não encontrou o autorizado
                            {
                                Log.For(this, PastaLogCliente).Info("NAO ENCONTROU RETORNO CCE : " + CdNotaFiscalSaida);

                                if (lstRej.Count > 0)
                                {
                                    //grava todos outros status
                                    foreach (Util.RetEnvEvento item in lstRej)
                                    {
                                        string xmlErro = Util.LerArquivo(item.CaminhoArquivo);
                                        nhp.CartaCorrecaoUpdate(CdNotaFiscalSaidaCC, 499, Convert.ToInt32(item.retEvento.cStat), xmlErro, datasource, schema);
                                        nhp.InserirHistoricoItem(xmlErro, item.retEvento.nProt, item.retEvento.cStat, item.retEvento.xMotivo, CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce);

                                        ////mover o arquivo para pasta de erros
                                        //System.IO.File.Delete(item.CaminhoArquivo);
                                        System.IO.File.Move(item.CaminhoArquivo, DiretorioErro + "\\" + item.NomeArquivo);
                                    }
                                }
                            }
                            break;
                        }
                            #endregion

                        default:
                        {
                            //TODO: LOG
                            throw new Exception("Status não configurado " + StatusNfe.ToString());
                        }
                        }
                    }
                    _WorkFlowServico.AddEvento("FIM EXECUÇÃO");
                }
            }
            catch (Exception ex)
            {
                try
                {
                    Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString());

                    objemailadm.SUBJECT = "ERRO NFE CC-E" + cnpjEmpresa.ToString() + " SCHEMA:" + schema;
                    objemailadm.BODY    = ex.ToString();
                    Util.EnviaEmail(objemailadm, "*****@*****.**");
                }
                catch (Exception exs)
                {
                    RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error);
                }
            }
        }
        public void SalvarXMLInutilizacao()
        {
            WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFEInutilizacao");

            _WorkFlowServico.AddEvento("INÍCIO PROCESSO");

            NFEHelper nhp = new NFEHelper();
            string    XML = string.Empty;

            int CDNOTAFISCALINUTNUMERACAO = 0;

            int          StatusNfe = 0;
            MemoryStream oMemoryStream;
            XmlDocument  docProc;

            DataTable DTNfe = null;

            string   CaminhoXMLautorizado    = string.Empty;
            string   CaminhoArquivoRetorno   = string.Empty;
            string   nomeArquivoProc         = string.Empty;
            string   nomeArquivo             = string.Empty;
            string   xmlAutorizado           = string.Empty;
            string   IDINUTILIZACAO          = string.Empty;
            FileInfo fileAutorizacaoCompleto = null;

            try
            {
                if (multiplasfiliais.Equals("TRUE"))
                {
                    DTNfe = nhp.InutilizacaoIntegracaoFilial(cdentifilial, datasource, schema);
                }
                else
                {
                    DTNfe = nhp.InutilizacaoIntegracao(datasource, schema);
                }

                if (DTNfe.Rows.Count > 0)
                {
                    _WorkFlowServico.AddEvento("QTDE INUTILIZACAO:" + DTNfe.Rows.Count.ToString());

                    foreach (DataRow dtrow in DTNfe.Rows)
                    {
                        XML = string.Empty;

                        docProc = new XmlDocument();

                        CDNOTAFISCALINUTNUMERACAO = Convert.ToInt32(dtrow["CDNOTAFISCALINUTNUMERACAO"]);

                        IDINUTILIZACAO = dtrow["IDINUTILIZACAO"].ToString();

                        StatusNfe = Convert.ToInt32(dtrow["CDSTATUS"]);

                        _WorkFlowServico.AddEvento(string.Format("NFS INUTI: {0} STATUS:{1}", CDNOTAFISCALINUTNUMERACAO, StatusNfe));

                        /*
                         *  0   Aguardando integração da NF-e
                         *  1   NF-e Integrada
                         *  2   Erro integração da NF-e
                         *  400	Carta de correção autorizada pela SEFAZ
                         *  402	Erro de integração de Carta de correção
                         *  499	Carta de correção NAO autorizada pela SEFAZ
                         *  401	Carta de correção integrada
                         */

                        string dtEmissao = string.Empty;

                        switch (StatusNfe)
                        {
                            #region Envio
                        case 0:     //ENVIO
                        {
                            XML = dtrow["XMLENVIO"].ToString();

                            _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO");
                            if (string.IsNullOrEmpty(XML))
                            {
                                throw new Exception("O XML NÃO FOI GERADO CD: " + CDNOTAFISCALINUTNUMERACAO.ToString());
                            }

                            oMemoryStream = Util.StringXmlToStream(XML);

                            _WorkFlowServico.AddEvento("SALVAR XML NA PASTA");
                            docProc.Load(oMemoryStream);

                            /*
                             * 35151234567890123455001000000001000000001-ped-inu.xml
                             */

                            string IdInuti = Util.PegarIDInutilizacao(XML);

                            docProc.Save(string.Format("{0}\\{1}-ped-inu.xml", DiretorioEnviar, IdInuti));

                            _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS INUTI: " + CDNOTAFISCALINUTNUMERACAO.ToString());

                            //Atualiza o status da nfe para NF-e Integrada
                            nhp.UpdateStatusInutilizacao(CDNOTAFISCALINUTNUMERACAO, 1, 0, datasource, schema);

                            _WorkFlowServico.AddEvento("NFS INUTI ATUALIZADA : " + CDNOTAFISCALINUTNUMERACAO.ToString());

                            //log DE ENVIADO OK
                            _WorkFlowServico.AddEvento("NFS INUTI ENVIADA PARA SEFAZ: " + CDNOTAFISCALINUTNUMERACAO.ToString());

                            //LOG DOC-e detalhamento da NFE
                            //dtEmissao = DateTime.Now.ToString("dd/MM/yyyy");


                            //Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow());

                            //nhp.InserirHistoricoItem(XML,
                            //    "",
                            //    "401",
                            //    "Inutilização integrada",
                            //    CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce);

                            break;
                        }

                            #endregion
                            #region Retorno
                        case 1:
                        {
                            //35151436491100010255001000011112000011119-inu.xml

                            /*
                             * <retInutNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
                             * <infInut>
                             *  <tpAmb>1</tpAmb>
                             *  <verAplic>SP_NFE_PL_006q</verAplic>
                             *  <cStat>102</cStat>
                             *  <xMotivo>Inutilização de número homologado</xMotivo>
                             *  <cUF>35</cUF>
                             *  <ano>15</ano>
                             *  <CNPJ>14364911000102</CNPJ>
                             *  <mod>55</mod>
                             *  <serie>1</serie>
                             *  <nNFIni>11110</nNFIni>
                             *  <nNFFin>11110</nNFFin>
                             *  <dhRecbto>2015-01-30T12:02:14</dhRecbto>
                             *  <nProt>135150063643955</nProt>
                             * </infInut>
                             * </retInutNFe>
                             */
                            IDINUTILIZACAO = IDINUTILIZACAO.Substring(2, IDINUTILIZACAO.Length - 2);

                            string xmlAutorizacao         = string.Empty;
                            string xmlAutorizacaoCompleto = string.Empty;
                            //FileInfo fileAutorizacaoCompleto = null;
                            Util.RetInutilizacao oDadosRetInuti = new Util.RetInutilizacao();

                            List <Util.RetInutilizacao> lstArqRetInut = new List <Util.RetInutilizacao>();

                            System.IO.DirectoryInfo dirInfo = new DirectoryInfo(DiretorioRetorno);

                            System.IO.FileInfo[] ArquivosRetornoEnvio = dirInfo.EnumerateFiles("*-inu.xml", SearchOption.AllDirectories).AsParallel().ToArray();


                            //Carregar a lista de arquivos de retorno
                            foreach (FileInfo fi in ArquivosRetornoEnvio.ToList())
                            {
                                xmlAutorizacao = Util.LerArquivo(fi.FullName);
                                oDadosRetInuti = Util.PegarRetornoInutilizacao(xmlAutorizacao, fi.Name);
                                oDadosRetInuti.CaminhoArquivo = fi.FullName;
                                oDadosRetInuti.NomeArquivo    = fi.Name;
                                lstArqRetInut.Add(oDadosRetInuti);
                            }

                            //Lista de rejeições
                            //Processamento do Lote – o lote foi processado (cStat=128), a validação de cada evento do lote
                            List <Util.RetInutilizacao> lstRej = (from z in lstArqRetInut
                                                                  where z.IdInutilizacao == IDINUTILIZACAO && z.cStat != "102"
                                                                  select z).ToList();
                            //Arquivo com aprovação
                            //Recebido pelo Sistema de Registro de Eventos, com vinculação do evento na NF-e, o
                            //Evento será armazenado no repositório do Sistema de Registro de Eventos com a vinculação do Evento à respectiva NF-e (cStat=135);
                            Util.RetInutilizacao drcAprov = (from z in lstArqRetInut
                                                             where z.IdInutilizacao == IDINUTILIZACAO && z.cStat == "102"
                                                             select z).FirstOrDefault();

                            //Arquivo completo
                            fileAutorizacaoCompleto = (from a in ArquivosRetornoEnvio
                                                       where a.Name.Contains(IDINUTILIZACAO)
                                                       select a).FirstOrDefault();
                            //Retorno aprovado pela sefaz
                            if (drcAprov != null)
                            {
                                _WorkFlowServico.AddEvento(string.Format("Inutlizacao nº: {0} dt sefaz:{1}-{2}-{3} Encontrou o retorno.",
                                                                         CDNOTAFISCALINUTNUMERACAO, drcAprov.dhRecbto.ToString("dd/mM/yyyy hh:mm:ss"), drcAprov.cStat, drcAprov.xMotivo));

                                //Ler o conteudo do arquivo
                                //xmlAutorizacao = Util.LerArquivo(string.Concat(DiretorioRetorno, "\\", nomeArquivoProc));
                                xmlAutorizacao = Util.LerArquivo(drcAprov.CaminhoArquivo);
                                //Caminho fisico do arquivo
                                CaminhoArquivoRetorno = drcAprov.CaminhoArquivo;
                                RJS.Optimus.Win.Int.Servicos.NFEOptimus.Classes.Util.RetInutilizacao ret = Util.PegarRetornoInutilizacao(xmlAutorizacao, drcAprov.NomeArquivo);
                                //DateTime dtReciboNf = Convert.ToDateTime(drcAprov.retEvento.dhRegEvento, new CultureInfo("pt-BR"));

                                //string DTYYYYMM_ = dtReciboNf.ToString("yyyyMM");

                                if (fileAutorizacaoCompleto == null)
                                {
                                    _WorkFlowServico.AddEvento(string.Format("XML autorizado não encontrado {0}", fileAutorizacaoCompleto.FullName));
                                }
                                else
                                {
                                    _WorkFlowServico.AddEvento(string.Format("Status {0} da nota fiscal nº {1}", drcAprov.cStat, CDNOTAFISCALINUTNUMERACAO));

                                    xmlAutorizacaoCompleto = Util.LerArquivo(fileAutorizacaoCompleto.FullName);

                                    nhp.InutilizacaoUpdate(CDNOTAFISCALINUTNUMERACAO, 100, Convert.ToInt32(drcAprov.cStat), xmlAutorizacaoCompleto, datasource, schema);

                                    //nhp.InserirHistoricoItem(xmlAutorizacaoCompleto, drcAprov.nProt, drcAprov.cStat, drcAprov.xMotivo,
                                    //CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce);
                                }
                            }
                            else         //não encontrou o autorizado
                            {
                                if (lstRej.Count > 0)
                                {
                                    //grava todos outros status
                                    foreach (Util.RetInutilizacao item in lstRej)
                                    {
                                        string xmlErro = Util.LerArquivo(item.CaminhoArquivo);
                                        nhp.InutilizacaoUpdate(CDNOTAFISCALINUTNUMERACAO, 99, Convert.ToInt32(item.cStat), xmlErro, datasource, schema);
                                        //nhp.InserirHistoricoItem(xmlErro, item.nProt, item.cStat, item.xMotivo, CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce);

                                        ////mover o arquivo para pasta de erros
                                        //System.IO.File.Delete(item.CaminhoArquivo);
                                        System.IO.File.Move(item.CaminhoArquivo, DiretorioErro + "\\" + item.NomeArquivo + DateTime.Now.ToString());
                                    }
                                }
                            }
                            break;
                        }
                            #endregion

                        default:
                        {
                            //TODO: LOG
                            throw new Exception("Status não configurado " + StatusNfe.ToString());
                        }
                        }
                    }
                    _WorkFlowServico.AddEvento("FIM EXECUÇÃO");
                    Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow());
                }
            }
            catch (Exception ex)
            {
                try
                {
                    Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString());

                    objemailadm.SUBJECT = "ERRO NFE INUTILIZACAO " + cnpjEmpresa.ToString() + " SCHEMA:" + schema;
                    objemailadm.BODY    = ex.ToString();
                    Util.EnviaEmail(objemailadm, "*****@*****.**");
                }
                catch (Exception exs)
                {
                    RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error);
                }
            }
        }
예제 #3
0
        public void EnviarEmailCliente()
        {
            WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaMail");

            _WorkFlowServico.AddEvento("INÍCIO PROCESSO");
            NFEHelper nfh = new NFEHelper();
            DataTable dt  = null;

            try
            {
                //Verificar se a Internet está ativa
                if (RJS.Optimus.Biblioteca.RJSOptimusNetwork.IsConnected())
                {
                    _WorkFlowServico.AddEvento("INÍCIO nfh.NotasFiscaisEnviarEmail()");

                    if (multiplasfiliais.Equals("TRUE"))
                    {
                        dt = nfh.NotaFiscalEnviarEmailFilial(cdentifilial, datasource, schema);
                    }
                    else
                    {
                        dt = nfh.NotaFiscalEnviarEmail(datasource, schema);
                    }

                    _WorkFlowServico.AddEvento("FIM nfh.NotasFiscaisEnviarEmail()");

                    string xml               = string.Empty;
                    string emailCliente      = string.Empty;
                    string pasta             = string.Empty;
                    string chaveNfe          = string.Empty;
                    string TxFileNfe         = string.Empty;
                    string TxFileNfeAut      = string.Empty;
                    int    CdNotaFiscalSaida = 0;

                    foreach (DataRow dtr in dt.Rows)
                    {
                        //DADOS
                        emailCliente      = dtr["TXEMAIL"].ToString();
                        CdNotaFiscalSaida = Convert.ToInt32(dtr["CDNOTAFISCALSAIDA"]);

                        pasta        = dtr["CDENTIFILIAL"].ToString();
                        chaveNfe     = dtr["NRNFECHAVE"].ToString();
                        TxFileNfe    = dtr["TXFILENFE"].ToString();
                        TxFileNfeAut = dtr["TXFILENFEAUT"].ToString();


                        //não enviar para a lista de dominios informado
                        //mktp.extra.com.br
                        if (EnviarParaDominio(emailCliente))
                        {
                            #region Gravar o arquivo na pasta para o PHP Ler
                            _WorkFlowServico.AddEvento("NRNOTA: " + CdNotaFiscalSaida.ToString() + " CHAVE NFE: " + chaveNfe);

                            string NomeDoArquivo = string.Format("{0}\\{1}\\{2}.xml", PastaNfePHP, pasta, chaveNfe);
                            _WorkFlowServico.AddEvento("NomeDoArquivo: " + NomeDoArquivo);
                            string NomeDoArquivoPdf = string.Format("{0}\\{1}\\{2}.pdf", PastaNfePHP, pasta, chaveNfe);
                            _WorkFlowServico.AddEvento("NomeDoArquivoPdf: " + NomeDoArquivoPdf);
                            //Verifica se o arquivo existe
                            if (!System.IO.File.Exists(NomeDoArquivo))
                            {
                                //Montar o XML
                                StringBuilder XML_NFE = new StringBuilder();
                                XML_NFE.AppendLine(TxFileNfe);

                                _WorkFlowServico.AddEvento("PASTA: " + string.Concat(PastaNfePHP, "\\", pasta));

                                //Se não existe o diretorio cria um novo
                                if (!System.IO.Directory.Exists(string.Concat(PastaNfePHP, "\\", pasta)))
                                {
                                    System.IO.Directory.CreateDirectory(string.Concat(PastaNfePHP, "\\", pasta));
                                }

                                //Se existe exclui o arquivo
                                if (System.IO.File.Exists(NomeDoArquivo))
                                {
                                    System.IO.File.Delete(NomeDoArquivo);
                                }

                                _WorkFlowServico.AddEvento("INÍCIO GRAVAÇÃO DO ARQUIVO");
                                _WorkFlowServico.AddEvento("ARQUIVO: " + NomeDoArquivo);
                                StreamWriter sw = new StreamWriter(NomeDoArquivo, false, Encoding.GetEncoding(1252));
                                sw.Write(XML_NFE);
                                sw.Close();

                                _WorkFlowServico.AddEvento("FIM GRAVAÇÃO DO ARQUIVO");
                            }
                            //CARREGAR O XML PARA PEGAR OS DADOS
                            NFE _NFEtrocar = Util.CarregarNfe(NomeDoArquivo);
                            _WorkFlowServico.AddEvento("CARREGA O XML PARA PERGAR OS DADOS:" + NomeDoArquivo);

                            #endregion
                            _WorkFlowServico.AddEvento("INÍCIO DOWNLOAD DO PDF");
                            #region download do pdf
                            bool pdfOK = false;

                            int i = 0;

                            for (i = 1; i < 5; i++)
                            {
                                if (!pdfOK)
                                {
                                    _WorkFlowServico.AddEvento("TENTATIVA Nº:" + i.ToString());
                                    //Log.For(this, PastaLogCliente).Info("TENTATIVA Nº:" + i.ToString());
                                    //gerar o PDF e gravar o PDF
                                    if (i == 1)
                                    {
                                        _WorkFlowServico.AddEvento("URL: " + string.Format(urlDanfe, pasta, chaveNfe, schema));
                                        _WorkFlowServico.AddEvento("ARQUIVO: " + NomeDoArquivoPdf);
                                        //Log.For(this, PastaLogCliente).Info("PDF URL: " + string.Format(urlDanfe, pasta, chaveNfe, cliente));
                                        //Log.For(this, PastaLogCliente).Info("ARQUIVO: " + NomeDoArquivoPdf);
                                    }

                                    if (!System.IO.File.Exists(NomeDoArquivoPdf))//se nao existe faz o download
                                    {
                                        try
                                        {
                                            Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf);
                                            _WorkFlowServico.AddEvento("BAIXOU NA TENTATIVA:" + i.ToString());
                                        }
                                        catch (Exception exw)
                                        {
                                            Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf);
                                            if (!System.IO.File.Exists(NomeDoArquivoPdf))
                                            {
                                                _WorkFlowServico.AddEvento("NAO BAIXOU NA EXECEPTION :" + exw.ToString());
                                            }
                                            else
                                            {
                                                _WorkFlowServico.AddEvento("BAIXOU NA EXECEPTION :" + exw.ToString());
                                            }
                                        }

                                        if (!System.IO.File.Exists(NomeDoArquivoPdf))
                                        {
                                            _WorkFlowServico.AddEvento("NAO CONSEGUIU BAIXAR:" + NomeDoArquivoPdf);
                                        }
                                        else
                                        {
                                            _WorkFlowServico.AddEvento("FIM DOWNLOAD DO PDF TENTATIVA Nº:" + i.ToString());

                                            FileInfo fi = new FileInfo(NomeDoArquivoPdf);
                                            if (fi.Length < 6144)// menor que 6kb
                                            {
                                                if (System.IO.File.Exists(NomeDoArquivoPdf))
                                                {
                                                    System.IO.File.Delete(NomeDoArquivoPdf);
                                                }

                                                Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf);
                                            }
                                            else
                                            {
                                                pdfOK = true;
                                            }
                                        }
                                    }
                                }
                            }
                            #endregion

                            RJSOptimusEmail email = new RJSOptimusEmail(smtp, Convert.ToInt32(porta), usuario, senha, EnableSSL);

                            FileInfo fiPdf = new FileInfo(NomeDoArquivoPdf);
                            #region Envio do email
                            if (fiPdf.Length < 6144)
                            {
                                _WorkFlowServico.AddEvento("ERRO GERAR PDF (TAMANHO):" + NomeDoArquivoPdf);
                                Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow());
                                objemailadm.SUBJECT = string.Format("ERRO GERAR PDF (TAMANHO) {0} Cnpj:{1} SCHEMA{2}:.", cliente, cnpjcliente, schema);
                                objemailadm.BODY    = fiPdf.FullName;
                                Util.EnviaEmail(objemailadm, "*****@*****.**");
                            }
                            else
                            {
                                //Enviar o e-mail
                                _WorkFlowServico.AddEvento("INÍCIO ENVIO E-MAIL");
                                if (smtp.Trim() == "smtp.optimuserp.com.br")
                                {
                                    email.From = "*****@*****.**";
                                }
                                else
                                {
                                    email.From = emailEmpresa;
                                }
                                email.From = emailEmpresa;
                                bool EmailClienteValido = true;

                                email.Subject = MsgSubject.Replace("#NRNOTA#", _NFEtrocar.IDE_NNF.ToString()).
                                                Replace("#CHAVE#", _NFEtrocar.IDE_ID).
                                                Replace("#DTEMISSAO#", _NFEtrocar.IDE_DEMI.ToString("dd/MM/yyyy")).
                                                Replace("#SERIE#", _NFEtrocar.IDE_SERIE).
                                                Replace("#RAZAO#", _NFEtrocar.RAZAOSOCIAL).
                                                Replace("#CODPEDIDO#", _NFEtrocar.CODPEDIDO).
                                                Replace("#NMCLIENTE#", _NFEtrocar.DEST_NOME);;

                                //if (Util.ValidarEmail(emailCliente))
                                //{

                                email.To = emailCliente;

                                string BodyTemplate = MsgPattern.ToString();

                                //Pegar do template
                                //se vier o nome do arquivo carrega se nao pega o texto que veio normal
                                if (BodyTemplate.Contains(".html"))
                                {
                                    string pastaTemplate = ConfigurationManager.AppSettings.Get("PASTA_TEMPLATE_HTML").ToString();

                                    string Body = System.IO.File.ReadAllText(pastaTemplate + BodyTemplate);

                                    BodyTemplate = Body;
                                }

                                BodyTemplate = BodyTemplate.Replace("#CNPJ#", Convert.ToUInt64(_NFEtrocar.EMIT_CNPJ).ToString(@"00\.000\.000\/0000\-00"));

                                BodyTemplate = BodyTemplate.Replace("#NRNOTA#", _NFEtrocar.IDE_NNF.ToString()).
                                               Replace("#CHAVE#", _NFEtrocar.IDE_ID).
                                               Replace("#DTEMISSAO#", _NFEtrocar.IDE_DEMI.ToString("dd/MM/yyyy")).
                                               Replace("#SERIE#", _NFEtrocar.IDE_SERIE).
                                               Replace("#RAZAO#", _NFEtrocar.RAZAOSOCIAL).
                                               Replace("#CODPEDIDO#", _NFEtrocar.CODPEDIDO).
                                               Replace("#NMCLIENTE#", _NFEtrocar.DEST_NOME);



                                email.Body = BodyTemplate;

                                _NFEtrocar = null;

                                try
                                {
                                    if (!string.IsNullOrEmpty(emailAdmin))
                                    {
                                        email.ListaEmailsBCC.Add(emailAdmin);
                                    }

                                    if (!string.IsNullOrEmpty(enviarCopiaCliente) && EmailClienteValido)
                                    {
                                        string[] emailscliente = enviarCopiaCliente.Split(';');

                                        foreach (string emailcli in emailscliente)
                                        {
                                            email.ListaEmailsBCC.Add(emailcli);
                                        }
                                    }

                                    email.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivo));    //XML
                                    email.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivoPdf)); //PDF
                                    email.IsBodyHtml = true;
                                    email.Enviar();

                                    //Atualiza o status da NFE como e-mail enviado
                                    nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, 3, datasource, schema);//ele tentar enviar 2x

                                    #region Enviar e-mail para transportador

                                    if (EnviarEmailTransportador)
                                    {
                                        _WorkFlowServico.AddEvento("INÍCIO ENVIO E-MAIL TRANSPORTADOR");
                                        List <string> EmailsTransportador = new List <string>();

                                        //Carrega o xml e pega o CNPJ do transportador
                                        string _CNPJ = Util.PegarCNPJTransportador(NomeDoArquivo);

                                        if (!string.IsNullOrEmpty(_CNPJ))
                                        {
                                            //Verifica se ja esta na base antes de buscar o transportador
                                            if (CacheLayer.Exists(_CNPJ))
                                            {
                                                EmailsTransportador = CacheLayer.Get <List <string> >(_CNPJ);
                                                _WorkFlowServico.AddEvento("ACHOU NO CACHE");
                                            }
                                            else
                                            {
                                                NFEHelper nh = new NFEHelper();
                                                //Busca na base os e-mail do transportador
                                                EmailsTransportador = nh.RetornaEmailTransportadora(_CNPJ, datasource, schema);

                                                if (EmailsTransportador.Count > 0)
                                                {
                                                    CacheLayer.Add(EmailsTransportador, _CNPJ);
                                                    _WorkFlowServico.AddEvento("ACHOU OS EMAILS : " + EmailsTransportador.Count.ToString());
                                                }
                                            }

                                            if (EmailsTransportador.Count > 0)
                                            {
                                                try
                                                {
                                                    RJSOptimusEmail emailtransp = new RJSOptimusEmail(smtp, Convert.ToInt32(porta), usuario, senha, EnableSSL);

                                                    if (!string.IsNullOrEmpty(emailAdmin))
                                                    {
                                                        emailtransp.ListaEmailsBCC.Add(emailAdmin);
                                                    }

                                                    if (smtp.Trim() == "smtp.optimuserp.com.br")
                                                    {
                                                        emailtransp.From = "*****@*****.**";
                                                    }
                                                    else
                                                    {
                                                        emailtransp.From = emailEmpresa;
                                                    }

                                                    emailtransp.Subject = MsgSubject;
                                                    emailtransp.Body    = "Nota fiscal eletronica";

                                                    //TODO lista de e-mails
                                                    foreach (string emailtranspenviar in EmailsTransportador)
                                                    {
                                                        //emailtransp.ListaEmailsBCC.Add(emailtranspenviar);
                                                        _WorkFlowServico.AddEvento("EMAIL: " + emailtranspenviar);
                                                        emailtransp.ListaEmailsObj.Add(new System.Net.Mail.MailAddress(emailtranspenviar));
                                                    }

                                                    emailtransp.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivo));//XML
                                                    emailtransp.IsBodyHtml = true;
                                                    emailtransp.Enviar();
                                                    _WorkFlowServico.AddEvento("FIM ENVIO E-MAIL TRANSPORTADOR");
                                                }
                                                catch (Exception ext)
                                                {
                                                    _WorkFlowServico.AddEvento("ERRO ENVIO E-MAIL TRANSP:" + ext.ToString());
                                                }
                                            }
                                            else
                                            {
                                                _WorkFlowServico.AddEvento("NÃO RETORNOU E-MAIL TRANSP CNPJ: " + _CNPJ);
                                            }
                                        }
                                        else
                                        {
                                            _WorkFlowServico.AddEvento("NÃO ACHOU TRANSP " + NomeDoArquivo);
                                        }
                                    }
                                    #endregion

                                    _WorkFlowServico.AddEvento("FIM ENVIO E-MAIL ");

                                    Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow());
                                }
                                catch (Exception exx)
                                {
                                    nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, datasource, schema);

                                    try
                                    {
                                        Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + exx.ToString());

                                        string chavecache = Cache[CdNotaFiscalSaida.ToString()] as string;

                                        if (string.IsNullOrEmpty(chavecache))
                                        {
                                            Cache.Insert(
                                                CdNotaFiscalSaida.ToString(),
                                                CdNotaFiscalSaida.ToString(),
                                                null,
                                                Cache.NoAbsoluteExpiration,
                                                TimeSpan.FromSeconds(900));

                                            objemailadm.SUBJECT = string.Format("ERRO ENVIAR E-MAIL CLIENTE: {0} Cnpj: {1} E-MAIL CLIENTE: {2} CDNOTAFISCALSAIDA: {3} SCHEMA: {4}.", cliente, cnpjcliente, emailCliente, CdNotaFiscalSaida, schema);
                                            objemailadm.BODY    = exx.ToString();
                                            Util.EnviaEmail(objemailadm, "*****@*****.**");
                                        }
                                    }
                                    catch (Exception exxx)
                                    {
                                        Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + exxx.ToString());
                                    }
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, 3, datasource, schema);
                        }//fim tratamento do dominio
                    }
                }
                else
                {
                    //Internet fora do ar
                    _WorkFlowServico.AddEvento("SEM CONEXÃO COM A INTERNET");
                    Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow());
                }
            }
            catch (Exception ex)
            {
                try
                {
                    Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString());

                    objemailadm.SUBJECT = string.Format("ERRO CATCH GERAL ENVIAR E-MAIL. CLIENTE: {0} Cnpj: {1}.", cliente, cnpjcliente);
                    objemailadm.BODY    = _WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString();
                    Util.EnviaEmail(objemailadm, "*****@*****.**");
                }
                catch (Exception exs)
                {
                    RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error);
                }
            }
        }
        public void ProcessarRetornoSefazManual(string DiretorioEnviar, string PastaLogCliente, ObjEmail _objemailadm, string datasource, string schema, string pastaLogWs, string cdentifilial, string cnpjCliente)
        {
            PastaLogCliente = string.Format(@"{0}\{1}_{2}_{3}", pastaLogWs, schema, cdentifilial, cnpjCliente);

            DiretorioEnviar = DiretorioEnviar + "\\naoprocessadossefaz";

            if (!System.IO.Directory.Exists(DiretorioEnviar))
            {
                System.IO.Directory.CreateDirectory(DiretorioEnviar);
                System.IO.Directory.CreateDirectory(DiretorioEnviar + "\\" + "Processado");
            }

            System.IO.DirectoryInfo dirInfo         = new DirectoryInfo(DiretorioEnviar);
            System.IO.FileInfo[]    ArquivosRetorno = dirInfo.EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly).AsParallel().ToArray();
            ObjEmail objemailadm    = _objemailadm;
            string   xmlAutorizacao = string.Empty;

            Util.DadosRecClass        oDadosRec     = new Util.DadosRecClass();
            List <Util.DadosRecClass> lstArqRetProc = new List <Util.DadosRecClass>();

            try
            {
                foreach (FileInfo fi in ArquivosRetorno.ToList())
                {
                    xmlAutorizacao = Util.LerArquivo(fi.FullName);

                    xmlAutorizacao = xmlAutorizacao.Replace("\r", "").Replace("\n", "");

                    oDadosRec = Util.ReciboProtNFe(xmlAutorizacao, fi.FullName, fi.Name);

                    lstArqRetProc.Add(oDadosRec);
                }

                if (lstArqRetProc.Count > 0)
                {
                    Log.For(this, PastaLogCliente).Info("INICIO----------------------------------------------------------------------------");
                    Log.For(this, PastaLogCliente).Info("XML NAO RETORNADOS PELA SEFAZ");
                    Log.For(this, PastaLogCliente).Info(lstArqRetProc.Count.ToString() + "ARQUIVOS ENCONTRADOS");

                    NFEHelper nh = new NFEHelper();

                    foreach (var item in lstArqRetProc)
                    {
                        //atualiza no banco pela chave
                        Log.For(this, PastaLogCliente).Info("CHAVE:" + item.chNFe + "SCHEMA:" + schema);

                        nh.NotaFiscalAtualizarNaoProcessada(item.chNFe, item.xmlCompleto, item.xmlAutorizado, Convert.ToDateTime(item.dhRecbto), item.nProt, item.xMotivo, datasource, schema);

                        System.IO.File.Move(item.CaminhoArquivo, DiretorioEnviar + "\\" + "Processado" + "\\" + item.NomeArquivo + DateTime.Now.ToString("ddMMyyyyhhmmss"));
                    }
                    Log.For(this, PastaLogCliente).Info("FIM----------------------------------------------------------------------------");
                }
            }
            catch (Exception ex)
            {
                Log.For(this, PastaLogCliente).Error("XML NAO RETORNADOS PELA SEFAZ - ERRO : ");
                Log.For(this, PastaLogCliente).Error(ex.ToString());
                Log.For(this, PastaLogCliente).Error("FIM ERRO XML NAO RETORNADOS PELA SEFAZ");
                objemailadm.SUBJECT = "Erro carregar xml não processado schema:" + schema;
                objemailadm.BODY    = ex.ToString();
                Util.EnviaEmail(objemailadm, "*****@*****.**");
            }
        }
예제 #5
0
        /// <summary>
        /// Salva o xml na pasta do  UNINFE para envio para a sefaz.
        /// </summary>
        public void SalvarXMLIntegracaoUNINFE()
        {
            WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaSend");

            _WorkFlowServico.AddEvento("INÍCIO PROCESSO");
            NFEHelper    nhp               = new NFEHelper();
            string       XML               = string.Empty;
            string       ChaveNfe          = string.Empty;
            int          CdNotaFiscalSaida = 0;
            int          StatusNfe         = 0;
            MemoryStream oMemoryStream;
            XmlDocument  docProc;
            string       TPEMISSAO = string.Empty;
            DataTable    DTNfe     = null;

            try
            {
                if (!System.IO.Directory.Exists(DiretorioEnviar))
                {
                    throw new Exception(string.Format("O diretório {0} não existe.", DiretorioEnviar));
                }

                if (multiplasfiliais.Equals("TRUE"))
                {
                    DTNfe = nhp.NotaFiscalIntegracaoFilial(cdentifilial, datasource, schema);
                }
                else
                {
                    DTNfe = nhp.NotaFiscalIntegracao(datasource, schema);
                }


                if (DTNfe.Rows.Count > 0)
                {
                    _WorkFlowServico.AddEvento("QTDE NFS:" + DTNfe.Rows.Count.ToString());

                    foreach (DataRow dtrow in DTNfe.Rows)
                    {
                        XML      = string.Empty;
                        ChaveNfe = string.Empty;
                        docProc  = new XmlDocument();

                        CdNotaFiscalSaida = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDA"]);

                        StatusNfe = Convert.ToInt32(dtrow["CDNFESTATUS"]);

                        /*
                         * Forma de emissão da NF-e
                         * 1 - Normal;
                         * 2 - Contingência FS
                         * 3 - Contingência SCAN
                         * 4 - Contingência DPEC
                         * 5 - Contingência FSDA
                         * 6 - Contingência SVC - AN
                         * 7 - Contingência SVC - RS
                         * 9 - Contingência off-line NFC-e
                         */
                        TPEMISSAO = dtrow["CDTIPOEMISSAONFE"].ToString();

                        if (string.IsNullOrEmpty(TPEMISSAO))
                        {
                            throw new Exception("Informe o CDTIPOEMISSAONFE na tabela de filial 1- normal acima de 2 olhar a contingencia do estado");
                        }

                        if (TPEMISSAO != "1")
                        {
                            _WorkFlowServico.AddEvento(string.Format("#CONTINGENCIA #NFS: {0} STATUS:{1} TIPO EMISSAO{2}", CdNotaFiscalSaida, StatusNfe, TPEMISSAO));
                        }

                        _WorkFlowServico.AddEvento(string.Format("NFS: {0} STATUS:{1}", CdNotaFiscalSaida, StatusNfe));

                        /*
                         * 0    Aguardando integração da NF-e
                         * 1    NF-e Integrada com
                         * 2    Erro integração da NF-e
                         * 100	Autorizado uso da NF-e pela SEFAZ
                         * 200	Aguardando integração de Cancelamento
                         * 201	Cancelamento Integrado
                         * 202	Erro de Cancelamento Integrado
                         * 300	Cancelamento autorizado pela SEFAZ
                         * 299	Cancelamento NAO autorizado pela SEFAZ
                         * 99   NF-e Não Autorizada pela SEFAZ
                         */

                        string dtEmissao = string.Empty;

                        string NovaChaveDPEC = string.Empty;

                        switch (StatusNfe)
                        {
                        case 0:     //ENVIO
                        {
                            XML = dtrow["TXNDDLAYOUT"].ToString();

                            _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO");
                            if (string.IsNullOrEmpty(XML))
                            {
                                objemailadm.SUBJECT = "O XML NÃO FOI GERADO CDNOTAFISCALSAIDA: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema;
                                objemailadm.BODY    = "O XML NÃO FOI GERADO CDNOTAFISCALSAIDA: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema;
                                Util.EnviaEmail(objemailadm, "*****@*****.**");
                            }
                            else
                            {
                                //alterar o xml para envio em contingencia
                                if (TPEMISSAO != "1")
                                {
                                    XML = Util.AlterarChaveETpemisaoNFE(XML, TPEMISSAO, false, out NovaChaveDPEC);
                                    _WorkFlowServico.AddEvento("CHAVE CONTINGENCIA: " + NovaChaveDPEC + " CDNOTAFISCALSAIDA:" + CdNotaFiscalSaida.ToString());
                                }


                                oMemoryStream = Util.StringXmlToStream(XML);

                                //Validacao do XML
                                Util ut = new Util();

                                string arqSchema = string.Empty;

                                if (versaoxml == "2")
                                {
                                    arqSchema = "\\nfe_v2.00.xsd";
                                }
                                else if (versaoxml == "3")
                                {
                                    arqSchema = "\\nfe_v3.10.xsd";
                                }
                                else
                                {
                                    arqSchema = "\\nfe_v4.00.xsd";
                                }


                                //Log.For(this, PastaLogCliente).Info("Arquivo xsd :" + pastaSchema + arqSchema);

                                ut.ValidaXMLNFE(XML.Trim(), pastaSchema + arqSchema);

                                if (string.IsNullOrEmpty(ut.MsgValidacaoXML))
                                {
                                    _WorkFlowServico.AddEvento("SALVAR XML NA PASTA");

                                    try
                                    {
                                        //docProc.Load(oMemoryStream);

                                        if (TPEMISSAO == "1")
                                        {
                                            //docProc.Save(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()));
                                            Util.SaveMemoryStreamToFile(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()), oMemoryStream);
                                        }
                                        else
                                        {
                                            //docProc.Save(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, NovaChaveDPEC));
                                            Util.SaveMemoryStreamToFile(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, NovaChaveDPEC), oMemoryStream);
                                        }

                                        _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS: " + CdNotaFiscalSaida.ToString());

                                        //Atualiza o status da nfe para NF-e Integrada
                                        nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 1, NovaChaveDPEC, datasource, schema);

                                        _WorkFlowServico.AddEvento("NFS ATUALIZADA : " + CdNotaFiscalSaida.ToString());

                                        //log DE ENVIADO OK
                                        _WorkFlowServico.AddEvento("NFS ENVIADA PARA SEFAZ: " + CdNotaFiscalSaida.ToString());
                                        _WorkFlowServico.AddEvento("NFS CHAVE: " + dtrow["NRNFECHAVE"].ToString());

                                        //LOG DOC-e detalhamento da NFE

                                        dtEmissao = Convert.ToDateTime(dtrow["DTEMISSAO"]).ToString("dd/MM/yyyy");

                                        nhp.InserirHistoricoNFE(cnpjEmpresa.ToString(),
                                                                dtrow["NRNOTA"].ToString(),
                                                                dtrow["CDSERIE"].ToString(),
                                                                CdNotaFiscalSaida.ToString(),
                                                                dtrow["CDENTIFILIAL"].ToString(),
                                                                dtEmissao,
                                                                StatusNfe.ToString(),
                                                                dtrow["TXNDDLAYOUT"].ToString(),
                                                                string.Empty,
                                                                datasourceDoce,
                                                                schemaDoce);
                                    }
                                    catch (Exception exdsd)
                                    {
                                        _WorkFlowServico.AddEvento("ERRO : CDNOTA:" + CdNotaFiscalSaida.ToString() + " CHAVE:" + dtrow["NRNFECHAVE"].ToString() + exdsd.ToString());
                                        nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 2, NovaChaveDPEC, datasource, schema);

                                        objemailadm.SUBJECT = "[C] Carregar xml ERRO: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema;
                                        objemailadm.BODY    = "ERRO : CDNOTA:" + CdNotaFiscalSaida.ToString() + " CHAVE:" + dtrow["NRNFECHAVE"].ToString() + " - " + exdsd.ToString();
                                        Util.EnviaEmail(objemailadm, "*****@*****.**");
                                    }
                                }
                                else
                                {
                                    Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow());
                                    Log.For(this, PastaLogCliente).Error("ERRO DE VALIDACAO:" + Environment.NewLine + ut.MsgValidacaoXML);
                                    string msgerrotraduzida = Biblioteca.RJSOptimusUtil.TraduzMensagemErroNfe(ut.MsgValidacaoXML);
                                    nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 2, string.Empty, datasource, schema, msgerrotraduzida);
                                }
                            }

                            break;
                        }

                        case 200:     //CANCELAMENTO
                        {
                            try
                            {
                                Log.For(this, PastaLogCliente).Info("CANCELAMENTO CDNOTA:" + CdNotaFiscalSaida.ToString());
                                XML = dtrow["TXNDDCANCLAYOUT"].ToString();

                                if (string.IsNullOrEmpty(XML))
                                {
                                    throw new Exception("O XML não foi gerado CdNotaFiscalSaida:" + CdNotaFiscalSaida.ToString());
                                }

                                oMemoryStream = Util.StringXmlToStream(XML);

                                docProc.Load(oMemoryStream);
                                docProc.Save(string.Format("{0}\\{1}-env-canc.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()));
                                Log.For(this, PastaLogCliente).Info(string.Format("{0}\\{1}-env-canc.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()));
                                //Atualiza o status da nfe para enviado para a Sefaz
                                nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 201, string.Empty, datasource, schema);

                                //LOG DOC-e detalhamento da NFE
                                nhp.UpdateHistoricoCanc(XML, string.Empty, dtrow["CDNOTAFISCALSAIDA"].ToString(), datasourceDoce, schemaDoce);
                                Log.For(this, PastaLogCliente).Info("FIM CANCELAMENTO");
                            }
                            catch (Exception ex)
                            {
                                Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString());

                                objemailadm.SUBJECT = "CANCELAMENTO ERRO: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema;
                                objemailadm.BODY    = _WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString();
                                Util.EnviaEmail(objemailadm, "*****@*****.**");
                            }

                            break;
                        }

                        default:
                        {
                            //TODO: LOG
                            throw new Exception("Status não configurado " + StatusNfe.ToString());
                        }
                        }
                    }
                    _WorkFlowServico.AddEvento("FIM EXECUÇÃO");
                }
            }
            catch (Exception ex)
            {
                try
                {
                    Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString());

                    string cha = Cache[ChaveNfe].ToString();

                    if (string.IsNullOrEmpty(cha))
                    {
                        Cache.Insert(ChaveNfe,
                                     ChaveNfe,
                                     null,
                                     Cache.NoAbsoluteExpiration,
                                     TimeSpan.FromSeconds(900));

                        objemailadm.SUBJECT = "NFE SEND ERRO: CdNotaFiscalSaida: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema + " CNPJ:" + cnpjEmpresa;
                        objemailadm.BODY    = "ERRO : " + ex.ToString();
                        Util.EnviaEmail(objemailadm, "*****@*****.**");
                    }
                }
                catch (Exception exs)
                {
                    RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error);
                }
            }
        }
예제 #6
0
        public void BuscarXMLnaPasta()
        {
            WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFEEntrada.xmlPasta");
            NFEHelper       nfh = new NFEHelper();

            System.IO.DirectoryInfo dirInfoAuto        = new DirectoryInfo(pastaTmpEntrada);
            System.IO.FileInfo[]    ArquivosRetornoNfe = dirInfoAuto.GetFiles("*.xml", SearchOption.TopDirectoryOnly);

            foreach (FileInfo fi2 in ArquivosRetornoNfe.ToList())
            {
                try
                {
                    NFE _NFE = Util.CarregarNfe(pastaTmpEntrada + "\\" + fi2.Name);

                    //Validar se já existe na tabela NFE
                    string   P_DEST_CNPJ = _NFE.dEST_CNPJ;
                    string   P_EMIT_CNPJ = _NFE.EMIT_CNPJ;
                    string   p_DEST_CPF  = _NFE.DEST_CPF;
                    int      P_IDE_NNF   = _NFE.IDE_NNF;
                    int      P_IDE_SERIE = Convert.ToInt32(_NFE.IDE_SERIE);
                    DateTime P_IDE_DEMI  = _NFE.IDE_DEMI;

                    //Util ut = new Util();

                    //Primeira Validação com o XSD da sefaz
                    //ut.ValidaXMLNFE(pastaTmpEntrada + "\\" + attach.Name, pastaSchema);

                    //Caso não esteja valido deleta o arquivo
                    //if (string.IsNullOrEmpty(ut.MsgValidacaoXML))
                    //{
                    //TODO:
                    //Verificar se a nota é valida na SEFAZ

                    //Carregar as informações do XML


                    //}
                    //else
                    //{
                    //    _WorkFlowServico.AddEvento(string.Format("XML INVÁLIDO: {0} ERRO:{1}", attach.Name, ut.MsgValidacaoXML));
                    //    System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", attach.Name), string.Concat(pastaEntradaERRO, "\\", attach.Name));
                    //}

                    if (nfh.NotaFiscalEntradaValidar(string.IsNullOrEmpty(P_DEST_CNPJ) ? p_DEST_CPF : P_DEST_CNPJ, P_EMIT_CNPJ, P_IDE_NNF, P_IDE_SERIE, P_IDE_DEMI, datasource, schema) == 0)
                    {
                        //Gravar na tabela NFE do ORACLE
                        nfh.NotasFiscalEntradaInsert(_NFE, datasource, schema);

                        //Insert com sucesso
                        if (System.IO.File.Exists(string.Concat(pastaEntradaOK, "\\", fi2.Name)))
                        {
                            System.IO.File.Delete(string.Concat(pastaEntradaOK, "\\", fi2.Name));
                        }

                        System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", fi2.Name), string.Concat(pastaEntradaOK, "\\", fi2.Name));


                        _WorkFlowServico.AddEvento(string.Format("NF Nº{0} CNPJ_EMIT:{1} SERIE:{2} CNPJ_CPF_DEST:{3}.", _NFE.IDE_NNF.ToString(), _NFE.EMIT_CNPJ.ToString(), _NFE.IDE_SERIE.ToString(), _NFE.DEST_CNPJ != null ? _NFE.DEST_CNPJ.ToString() : _NFE.DEST_CPF.ToString()));
                        //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + "OK");
                    }
                    else
                    {
                        _WorkFlowServico.AddEvento(string.Format("NF Nº{0} CNPJ_EMIT:{1} SERIE:{2} CNPJ_DEST:{3} JÁ IMPORTADA.", _NFE.IDE_NNF.ToString(), _NFE.EMIT_CNPJ.ToString(), _NFE.IDE_SERIE.ToString(), _NFE.DEST_CNPJ == null ? _NFE.DEST_CPF : _NFE.DEST_CNPJ));
                        System.IO.File.Delete(string.Concat(pastaTmpEntrada, "\\", fi2.Name));
                        //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + "JA");
                    }
                }
                catch (Exception ex)
                {
                    //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + "  -->EX:" + ex.ToString());

                    Log.For(this, PastaLogCliente).Error(pastaTmpEntrada + "\\" + fi2.Name + "  -->EX:" + ex.ToString());
                    try
                    {
                        System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", fi2.Name), string.Concat(pastaEntradaERRO, "\\", fi2.Name));

                        objemailadm.SUBJECT = "ERRO NFE ENTRADA BUSCAR NA PASTA" + cnpjEmpresa.ToString() + " SCHEMA:" + schema;
                        objemailadm.BODY    = ex.ToString();
                        Util.EnviaEmail(objemailadm, "*****@*****.**");
                    }
                    catch (Exception exs)
                    {
                        Log.For(this, PastaLogCliente).Error(pastaTmpEntrada + "\\" + fi2.Name + "  ao tentar mover-->EX:" + exs.ToString());
                    }
                }
            }

            if (ArquivosRetornoNfe.Count() > 0)
            {
                Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow());
                //string aaaa = chaveserro.ToString();
            }
        }