private void btnSalvar_Click(object sender, EventArgs e)
        {
            
            NotaFiscalControler controler = new NotaFiscalControler();
            //Seta o progressbar para o valor inicial
            progressBar1.Minimum = 0;
            //Seta o progressbar para o valor máximo
            progressBar1.Maximum = 100;
            //Setando quantidade por passo
            progressBar1.Step = 5;
            progressBar1.PerformStep();
            lblProcesso.Text = "Iniciando processos...";
            this.Update();
            progressBar1.PerformStep();
            lblProcesso.Text = "Verificando WebServices...";
            this.Update();
            //Verifica se o serviço está em operação
            try
            {
                string operacao = controler.StatusServicoNFe(parametroNfe);
                if (operacao == "Serviço em Operação")
                {
                    List<NfeVO> lstNfe = new List<NfeVO>();
                    StringBuilder sbArquivoAssinado = new StringBuilder();
                    bool selecaoNFe = false;
                    for (int i = 0; i < dgvNotaFiscal.RowCount; i++)
                    {
                        NotaFiscalVO identNotaFiscal = (NotaFiscalVO)dgvNotaFiscal.Rows[i].DataBoundItem;
                        //Verifica quais notas fiscais foram selecionadas para gerar e assinar o xml
                        if (dgvNotaFiscal[0, i].Value != null && (bool)dgvNotaFiscal[0, i].Value == true)
                        {
                            progressBar1.Visible = true;
                            progressBar1.PerformStep();
                            lblProcesso.Text = "Gerando arquivos XML...";
                            this.Update();
                            string mensagem = controler.GerarNFe(identNotaFiscal, parametroNfe);
                            if (mensagem.Contains("NFe"))
                            {
                                NfeVO identNFe = new NfeVO();
                                identNFe.ChaveNFE = mensagem.Substring(3, 44);
                                identNFe.CodNF = identNotaFiscal.CodNF;
                                identNFe.IndAmbiente = parametroNfe.Ambiente == "1" ? true : false;
                                identNFe.IndImpressao = false;
                                identNFe.UsuarioInc = 1;
                                identNFe.NF = identNotaFiscal.NF;
                                identNFe.Serie = identNotaFiscal.Serie;
                                identNFe.RazaoSocial = identNotaFiscal.Cliente.RazaoSocial;
                                identNFe.CNPJ = identNotaFiscal.Cliente.CNPJ;
                                identNFe.EnviarEmail = identNotaFiscal.Cliente.EmailNFE;
                                lstNfe.Add(identNFe);
                            }
                            selecaoNFe = true;
                        }
                    }
                    if (selecaoNFe)
                    {
                        //Após a geração e assinatura do xml segue o processo de válidação do arquivo
                        //os arquivos que forem validos, receberam um número de lote
                        string caminho = parametroNfe.PathPrincipal + @"\nfe\arquivos\assinado\";
                        string arquivo = ((parametroNfe.PathPrincipal == string.Empty) ? Application.StartupPath : parametroNfe.PathPrincipal) +
                        "\\nfe\\retornos\\retValidacao.txt";
                        foreach (NfeVO tempNfe in lstNfe)
                        {
                            string chNFe = "NFe" + tempNfe.ChaveNFE;
                            progressBar1.PerformStep();
                            lblProcesso.Text = "Válidando arquivos...";
                            this.Update();
                            string caminhoAssinado = caminho + chNFe + "-assinado.xml";
                            //Verifica a validade do xml
                            if (!new NotaFiscalControler().ValidarNFe(caminhoAssinado, parametroNfe, "nfe_v2.00.xsd"))
                            {
                                StringBuilder sb = new StringBuilder();
                                if (File.Exists(arquivo))
                                {
                                    StreamReader rd = new StreamReader(arquivo);
                                    while (rd.Peek() >= 0)
                                        sb.Append(rd.ReadLine() + "\r\n");
                                    rd.Close();
                                    File.Delete(arquivo);
                                }
                                controler.enviarEmailAnexo("smtp.nissimetal.com.br", "[email protected];", caminhoAssinado, "Falha de Válidação", sb);
                                progressBar1.Visible = false;
                                return;
                            }
                            //Se for valido armazena no lstNfe
                            else
                            {
                                progressBar1.PerformStep();
                                lblProcesso.Text = "Arquivo Válido:" + caminhoAssinado;
                                this.Update();
                                sbArquivoAssinado.Append(caminhoAssinado + ";");
                            }

                        }
                        //Gerando arquivo de Lote
                        LoteVO identLote = new LoteVO();
                        identLote.Nfe = lstNfe;
                        int codLote = ServiceClient.GerarLote(identLote);
                        progressBar1.PerformStep();
                        lblProcesso.Text = "Gerando arquivo de Lote...";
                        this.Update();
                        string refStatus = controler.GerarLote(sbArquivoAssinado.ToString(), parametroNfe, codLote);
                        string recibo = string.Empty;

                        progressBar1.PerformStep();
                        lblProcesso.Text = "Enviando arquivo de Lote...";
                        this.Update();
                        //Envia o lote
                        recibo = controler.RecepcaoNFe(refStatus, parametroNfe);
                        NfeVO identNFe = new NfeVO();
                        identNFe.CodNumLote = codLote;
                        if (!string.IsNullOrEmpty(recibo))
                        {
                            string[] recibos = recibo.Split('#');
                            
                            recibo = recibos[1];
                        }
                        else
                        {
                            MessageBox.Show("Falha ao enviar o arquivo de lote!");
                            return;

                        }
                        identNFe.NumRecibo = recibo;
                        ServiceClient.GravarReciboNFe(identNFe);
                        Thread.Sleep(3000);
                        //Faz consulta do lote processado
                        string retorno = controler.RetRecepcaoNfe(recibo, parametroNfe);
                        //Se autorizado gera o arquivo de distribuição.
                        if (retorno.Contains("Autorizado o uso da NF-e"))
                        {
                            progressBar1.PerformStep();
                            lblProcesso.Text = retorno;
                            this.Update();
                            foreach (NfeVO identNfe in lstNfe)
                            {
                                progressBar1.PerformStep();
                                lblProcesso.Text = "Consultando protocolo NF-e...";
                                this.Update();
                                string protocolo = controler.ConsultaNFe(identNfe.ChaveNFE, parametroNfe);
                                if (!string.IsNullOrEmpty(protocolo))
                                {
                                    string[] protocolos = protocolo.Split('#');
                                    protocolo = protocolos[1];
                                }
                                else
                                {
                                    MessageBox.Show("Falha no retorno do número de protocolo!");
                                    return;
                                }
                                controler.DistribuicaoNFe(identNfe.ChaveNFE, recibo, codLote.ToString(), parametroNfe);
                                identNfe.CodNumLote = codLote;
                                identNfe.IndStatus = "1";
                                identNfe.NumRecibo = recibo;
                                identNfe.NumProtocolo = protocolo;
                                progressBar1.PerformStep();
                                lblProcesso.Text = "Gravando número do protocolo: " + protocolo;
                                this.Update();
                                //Grava o status de Autorizado o uso da NF-e
                                ServiceClient.GravarStatusNFe(identNfe);
                                alteraStatusGrid(identNfe);
                                progressBar1.PerformStep();
                                lblProcesso.Text = "Enviando Email do Arquivo XML...";
                                this.Update();

                                //Cria objeto string builder  
                                StringBuilder sbBody = new NotaFiscalControler().getBody(identNfe.Serie, identNfe.NF, identNfe.RazaoSocial, identNfe.CNPJ, identNfe.ChaveNFE, identNfe.NumProtocolo); string caminhoDistribuicao = parametroNfe.PathPrincipal + @"\nfe\arquivos\procNFe\" +
       identNfe.ChaveNFE + "-procNFe.xml";
                                string caminhoPDF = parametroNfe.PathPrincipal + @"\nfe\arquivos\" + identNfe.ChaveNFE + ".pdf";
                                controler.enviarEmailAnexo("smtp.nissimetal.com.br", "[email protected];" + identNfe.EnviarEmail, caminhoDistribuicao, " NFe Nacional", sbBody);
                                progressBar1.Step = 100;
                                progressBar1.PerformStep();
                                lblProcesso.Text = "Imprimindo Danfe...";
                                this.Update();
                                Thread.Sleep(5000);
                                controler.NFeDanfe(caminhoDistribuicao + "|",
                                 caminhoPDF + "|",
                                Convert.ToInt32(parametroNfe.Ambiente),
                                3,
                                false,
                                parametroNfe.PathPrincipal + "|",
                                parametroNfe.TotalizarCfop + "|",
                                parametroNfe.DataPacketFormSeg + "|",
                                parametroNfe.TipoDanfe + "|",
                                parametroNfe.DanfeLogo + "|",
                                parametroNfe.DanfeInfo + "|",
                                parametroNfe.DataPacket + "|"
                                );
                            }

                        }
                        else
                        {
                            controler.enviarEmailAnexo("smtp.nissimetal.com.br", "[email protected];", "Falha de Válidação", new StringBuilder(retorno));
                            NfeVO identNfe = new NfeVO();
                            identNfe.CodNumLote = codLote;
                            identNfe.IndStatus = "0";
                            identNfe.NumProtocolo = "";
                            //Grava o status de Autorizado o uso da NF-e
                            ServiceClient.GravarStatusNFe(identNfe);
                            MessageBox.Show(retorno);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Selecione pelo menos uma NF para enviar!");
                    }
                    lblProcesso.Text = string.Empty;
                    progressBar1.Visible = false;
                }
                else
                {
                    MessageBox.Show("Serviço não está em operação tente novamente mais tarde!");
                }

            }
            catch (Exception ex)
            {
                controler.enviarEmailAnexo("smtp.nissimetal.com.br", "[email protected];", " NFe Nacional - Erro", new StringBuilder(ex.Message));
                MessageBox.Show("Um erro foi encontrado no sistema, um email foi enviado para analise! \nDesulpe-nos pelo incoveniente!");
            }
        }
Beispiel #2
0
 /// <summary>
 /// Método que gera o lote para NF-e
 /// </summary>
 /// <param name="identLote">Classe VO do lote</param>
 /// <returns>codLote</returns>
 // ------------------------------------------------------------------------- // 
 public int GerarLote(LoteVO identLote)
 {
     return new Nfe().GerarLote(identLote);
 }
Beispiel #3
0
 // ------------------------------------------------------------------------- //
 /// <summary>
 /// Método que gera o lote para NF-e
 /// </summary>
 /// <param name="identLote">Classe VO do lote</param>
 /// <returns>codLote</returns>
 public int GerarLote(LoteVO identLote)
 {
     OpenCommand("pr_gerar_lote", true);
     try
     {
         int codLote = int.MinValue;
         AddInParameter("@UsuarioInc",DbType.Int32, identLote.CodUsuario);
         AddInParameter("@xmlNfe", DbType.String, identLote.ToXml());
         ExecuteNonQuery();
         codLote = GetReturnValue();
         return codLote;
     }
     finally
     {
         CloseCommand();
     }
 }