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!"); } }
/// <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); }
// ------------------------------------------------------------------------- // /// <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(); } }