Exemple #1
0
 private void bbEnvEventoNFCe_Click(object sender, EventArgs e)
 {
     if (bsNFCeEnviar.Current != null)
     {
         if ((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).St_registro.Trim().ToUpper().Equals("C") &&
             (!(bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_contingencia.HasValue ||
              ((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_contingencia.HasValue &&
               (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).St_transmitidocancnfce)))
         {
             MessageBox.Show("NFCe ja se encontra CANCELADA.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
             return;
         }
         string msg = string.Empty;
         if ((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_contingencia.HasValue &&
             !(bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_protocolo.HasValue)
         {
             msg = "NFCe emitida em CONTINGÊNCIA OFFLINE e ainda não transmitida para a receita.\r\n" +
                   "O cancelamento desta NFCe somente ocorrerá após o envio da mesma para receita.";
         }
         if (MessageBox.Show((string.IsNullOrEmpty(msg) ? string.Empty : msg + "\r\n") + "Confirma cancelamento NFCe?", "Pergunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
             == DialogResult.Yes)
         {
             try
             {
                 bool st_cancelar = true;
                 if ((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_protocolo.HasValue ||
                     (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_contingencia.HasValue)
                 {
                     string motivo = string.Empty;
                     CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfg = null;
                     CamadaDados.Faturamento.Cadastros.TList_Evento lEv  = null;
                     //Verificar evento
                     CamadaDados.Faturamento.PDV.TList_EventoNFCe lEvento =
                         CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Buscar((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa,
                                                                             (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_nfcestr,
                                                                             string.Empty,
                                                                             null);
                     if (lEvento.Count.Equals(0))
                     {
                         if (string.IsNullOrEmpty(motivo))
                         {
                             Utils.InputBox ibp = new Utils.InputBox();
                             ibp.Text = "Motivo Cancelamento NFCe";
                             motivo   = ibp.ShowDialog();
                             if (string.IsNullOrEmpty(motivo))
                             {
                                 MessageBox.Show("Obrigatorio informar motivo de cancelamento da NFCe.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 return;
                             }
                             if (motivo.Trim().Length < 15)
                             {
                                 MessageBox.Show("Motivo de cancelamento deve ter mais que 15 caracteres.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 return;
                             }
                         }
                         //Buscar evento Cancelamento
                         if (lEv == null)
                         {
                             lEv = CamadaNegocio.Faturamento.Cadastros.TCN_Evento.Buscar(string.Empty, string.Empty, "CA", null);
                         }
                         if (lEv.Count.Equals(0))
                         {
                             MessageBox.Show("Não existe evento de CANCELAMENTO NFE cadastrado.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             return;
                         }
                         //Cancelar NFe Receita
                         CamadaDados.Faturamento.PDV.TRegistro_EventoNFCe rEvento = new CamadaDados.Faturamento.PDV.TRegistro_EventoNFCe();
                         rEvento.Cd_empresa        = (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa;
                         rEvento.Id_cupom          = (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_nfce;
                         rEvento.Chave_acesso_nfce = (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Chave_acesso;
                         rEvento.Nr_protocoloNFCe  = (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_protocolo;
                         rEvento.Dt_evento         = CamadaDados.UtilData.Data_Servidor();
                         rEvento.Justificativa     = motivo;
                         rEvento.Cd_eventostr      = lEv[0].Cd_eventostr;
                         rEvento.Tp_evento         = lEv[0].Tp_evento;
                         rEvento.Ds_evento         = lEv[0].Ds_evento;
                         rEvento.St_registro       = "A";
                         CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Gravar(rEvento, null);
                         lEvento.Add(rEvento);
                     }
                     if (!lEvento[0].St_registro.Trim().ToUpper().Equals("T") &&
                         (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_protocolo.HasValue)
                     {
                         //Buscar CfgNfe para a empresa
                         if (lCfg == null)
                         {
                             lCfg = CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa,
                                                                                          string.Empty,
                                                                                          string.Empty,
                                                                                          null);
                         }
                         if (lCfg.Count.Equals(0))
                         {
                             MessageBox.Show("Não existe configuração para envio de evento para a empresa " + (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa.Trim() + ".",
                                             "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         }
                         else
                         {
                             msg = NFCe.EventoNFCe.TEventoNFCe.EnviarEvento(lEvento[0], lCfg[0]);
                             if (!string.IsNullOrEmpty(msg))
                             {
                                 MessageBox.Show("Erro ao enviar evento CANCELAMENTO para a receita.\r\n" +
                                                 "Aguarde um tempo e tente novamente.\r\n" +
                                                 "Erro: " + msg.Trim() + ".",
                                                 "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                 st_cancelar = false;
                             }
                         }
                     }
                 }
                 if (st_cancelar)
                 {
                     CamadaNegocio.Faturamento.PDV.TCN_NFCe.CancelarCF(bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe, null);
                     MessageBox.Show("NFCe cancelada com sucesso.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                     if (!(bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_protocolo.HasValue &&
                         !(bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Id_contingencia.HasValue)
                     {
                         CamadaDados.Faturamento.Cadastros.TList_CadSequenciaNF lSeq =
                             CamadaNegocio.Faturamento.Cadastros.TCN_CadSequenciaNF.Busca((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_serie,
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_modelo,
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa,
                                                                                          null);
                         if (lSeq.Count > 0)
                         {
                             if (lSeq[0].Seq_NotaFiscal.Equals((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).NR_NFCe))
                             {
                                 lSeq[0].Seq_NotaFiscal--;
                                 CamadaNegocio.Faturamento.Cadastros.TCN_CadSequenciaNF.Gravar(lSeq[0], null);
                                 MessageBox.Show("Sequencia de numeração da serie voltada com sucesso.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             }
                             else
                             {
                                 //Buscar configuracao nfe
                                 CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfgNfe =
                                     CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar((bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_empresa,
                                                                                           string.Empty,
                                                                                           string.Empty,
                                                                                           null);
                                 if (lCfgNfe.Count > 0)
                                 {
                                     try
                                     {
                                         //Inutilizar numero nota
                                         NFCe.InutilizaNFCe.TInutilizaNFCe.InutilizarNFCe(lCfgNfe[0].Cd_uf_empresa,
                                                                                          lCfgNfe[0].Cnpj_empresa,
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Nr_serie,
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).Cd_modelo,
                                                                                          DateTime.Now.Year.ToString(),
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).NR_NFCe.Value,
                                                                                          (bsNFCeEnviar.Current as CamadaDados.Faturamento.PDV.TRegistro_NFCe).NR_NFCe.Value,
                                                                                          "NUMERO INUTILIZADO DEVIDO A ERRO NA EMISSAO DA NFCe",
                                                                                          lCfgNfe[0]);
                                         MessageBox.Show("Numero INUTILIZADO com sucesso na receita.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     }
                                     catch (Exception ex)
                                     { MessageBox.Show("Erro: " + ex.Message.Trim(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                                 }
                             }
                         }
                     }
                     afterBusca();
                 }
             }
             catch (Exception ex)
             { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
         }
     }
 }
Exemple #2
0
 private void CancelarNFe()
 {
     if (string.IsNullOrEmpty(cd_empresa.Text))
     {
         MessageBox.Show("Obrigatorio informar empresa.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
         return;
     }
     if (cbSerie.SelectedItem == null)
     {
         MessageBox.Show("Obrigatorio informar serie.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
         cbSerie.Focus();
         return;
     }
     if (string.IsNullOrEmpty(nr_notafiscal.Text))
     {
         MessageBox.Show("Obrigatorio informar " + (St_nfce ? "NFCe" : "NFe") + ".", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
         nr_notafiscal.Focus();
         return;
     }
     if (St_nfce)
     {
         CamadaDados.Faturamento.PDV.TList_NFCe lNFCe =
             CamadaNegocio.Faturamento.PDV.TCN_NFCe.Buscar(string.Empty,
                                                           nr_notafiscal.Text,
                                                           cd_empresa.Text,
                                                           string.Empty,
                                                           string.Empty,
                                                           string.Empty,
                                                           string.Empty,
                                                           decimal.Zero,
                                                           decimal.Zero,
                                                           string.Empty,
                                                           string.Empty,
                                                           cbSerie.SelectedValue.ToString(),
                                                           string.Empty,
                                                           false,
                                                           string.Empty,
                                                           string.Empty,
                                                           1,
                                                           null);
         if (lNFCe.Count > 0)
         {
             List <CamadaDados.Faturamento.PDV.TRegistro_VendaRapida> lVenda = null;
             if (lNFCe[0].St_registro.Trim().ToUpper().Equals("C"))
             {
                 MessageBox.Show("NFCe ja se encontra CANCELADA.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 return;
             }
             string msg = string.Empty;
             if (lNFCe[0].Id_contingencia.HasValue &&
                 !lNFCe[0].Nr_protocolo.HasValue)
             {
                 msg = "NFCe emitida em CONTINGÊNCIA OFFLINE e ainda não transmitida para a receita.\r\n" +
                       "O cancelamento desta NFCe somente ocorrerá após o envio da mesma para receita.";
             }
             if (MessageBox.Show((string.IsNullOrEmpty(msg) ? string.Empty : msg + "\r\n") + "Confirma cancelamento NFCe?", "Pergunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                 == DialogResult.Yes)
             {
                 try
                 {
                     bool st_cancelar = true;
                     //Verificar se o NFCe esta vinculado a NFe
                     object obj = new CamadaDados.Faturamento.NotaFiscal.TCD_LanFaturamento().BuscarEscalar(
                         new TpBusca[]
                     {
                         new TpBusca()
                         {
                             vNM_Campo = "isnull(a.st_registro, 'A')",
                             vOperador = "<>",
                             vVL_Busca = "'C'"
                         },
                         new TpBusca()
                         {
                             vNM_Campo = string.Empty,
                             vOperador = "exists",
                             vVL_Busca = "(select 1 from tb_fat_ecfvinculadoNF x " +
                                         "where x.cd_empresa = a.cd_empresa " +
                                         "and x.nr_lanctofiscal = a.nr_lanctofiscal " +
                                         "and x.cd_empresa = '" + lNFCe[0].Cd_empresa.Trim() + "' " +
                                         "and x.id_cupom = " + lNFCe[0].Id_nfcestr + ")"
                         }
                     }, "a.nr_notafiscal");
                     if (obj != null)
                     {
                         MessageBox.Show("NFCe Nº" + lNFCe[0].Id_nfcestr + " esta vinculado a NFe Nº" + obj.ToString() + ".\r\n" +
                                         "Para cancelar NFCe obrigatório antes cancelar NFe.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         return;
                     }
                     if (lNFCe[0].Nr_protocolo.HasValue ||
                         lNFCe[0].Id_contingencia.HasValue)
                     {
                         string motivo = string.Empty;
                         CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfg = null;
                         CamadaDados.Faturamento.Cadastros.TList_Evento lEv  = null;
                         //Verificar evento
                         CamadaDados.Faturamento.PDV.TList_EventoNFCe lEvento =
                             CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Buscar(lNFCe[0].Cd_empresa,
                                                                                 lNFCe[0].Id_nfcestr,
                                                                                 string.Empty,
                                                                                 null);
                         if (lEvento.Count.Equals(0))
                         {
                             if (string.IsNullOrEmpty(motivo))
                             {
                                 InputBox ibp = new InputBox();
                                 ibp.Text = "Motivo Cancelamento NFCe";
                                 motivo   = ibp.ShowDialog();
                                 if (string.IsNullOrEmpty(motivo))
                                 {
                                     MessageBox.Show("Obrigatorio informar motivo de cancelamento da NFCe.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     return;
                                 }
                                 if (motivo.Trim().Length < 15)
                                 {
                                     MessageBox.Show("Motivo de cancelamento deve ter mais que 15 caracteres.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     return;
                                 }
                             }
                             //Buscar evento Cancelamento
                             if (lEv == null)
                             {
                                 lEv = CamadaNegocio.Faturamento.Cadastros.TCN_Evento.Buscar(string.Empty, string.Empty, "CA", null);
                             }
                             if (lEv.Count.Equals(0))
                             {
                                 MessageBox.Show("Não existe evento de CANCELAMENTO NFE cadastrado.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 return;
                             }
                             //Cancelar NFe Receita
                             CamadaDados.Faturamento.PDV.TRegistro_EventoNFCe rEvento = new CamadaDados.Faturamento.PDV.TRegistro_EventoNFCe();
                             rEvento.Cd_empresa        = lNFCe[0].Cd_empresa;
                             rEvento.Id_cupom          = lNFCe[0].Id_nfce;
                             rEvento.Chave_acesso_nfce = lNFCe[0].Chave_acesso;
                             rEvento.Nr_protocoloNFCe  = lNFCe[0].Nr_protocolo;
                             rEvento.Dt_evento         = CamadaDados.UtilData.Data_Servidor();
                             rEvento.Justificativa     = motivo;
                             rEvento.Cd_eventostr      = lEv[0].Cd_eventostr;
                             rEvento.Tp_evento         = lEv[0].Tp_evento;
                             rEvento.Ds_evento         = lEv[0].Ds_evento;
                             rEvento.St_registro       = "A";
                             CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Gravar(rEvento, null);
                             lEvento.Add(rEvento);
                         }
                         if (!lEvento[0].St_registro.Trim().ToUpper().Equals("T") &&
                             lNFCe[0].Nr_protocolo.HasValue)
                         {
                             //Buscar CfgNfe para a empresa
                             if (lCfg == null)
                             {
                                 lCfg = CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar(lNFCe[0].Cd_empresa,
                                                                                              string.Empty,
                                                                                              string.Empty,
                                                                                              null);
                             }
                             if (lCfg.Count.Equals(0))
                             {
                                 MessageBox.Show("Não existe configuração para envio de evento para a empresa " + lNFCe[0].Cd_empresa.Trim() + ".",
                                                 "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             }
                             else
                             {
                                 msg = NFCe.EventoNFCe.TEventoNFCe.EnviarEvento(lEvento[0], lCfg[0]);
                                 if (!string.IsNullOrEmpty(msg))
                                 {
                                     MessageBox.Show("Erro ao enviar evento CANCELAMENTO para a receita.\r\n" +
                                                     "Aguarde um tempo e tente novamente.\r\n" +
                                                     "Erro: " + msg.Trim() + ".",
                                                     "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                     st_cancelar = false;
                                 }
                             }
                         }
                     }
                     if (st_cancelar)
                     {
                         if (!lNFCe[0].Nr_protocolo.HasValue &&
                             !lNFCe[0].Id_contingencia.HasValue)
                         {
                             //Buscar CfgNfe para a empresa
                             CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfgNfCe =
                                 CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar(lNFCe[0].Cd_empresa,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       null);
                             if (lCfgNfCe.Count.Equals(0))
                             {
                                 MessageBox.Show("Não existe configuração NFC-e para a empresa " + lNFCe[0].Cd_empresa.Trim() + ".",
                                                 "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             }
                             else
                             {
                                 //Consultar Chave
                                 string ret = NFCe.ConsultaChave.TConsultaChave.ConsultaChave(lNFCe[0].Chave_acesso,
                                                                                              "1",
                                                                                              lCfgNfCe[0]);
                                 if (!string.IsNullOrEmpty(ret))
                                 {
                                     MessageBox.Show("Não é permtido excluir cupom com chave de acesso existente na receita.\r\n" + ret, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     return;
                                 }
                             }
                         }
                         CamadaNegocio.Faturamento.PDV.TCN_NFCe.CancelarCF(lNFCe[0], null);
                         MessageBox.Show("NFCe cancelada com sucesso.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         if (!lNFCe[0].Nr_protocolo.HasValue &&
                             !lNFCe[0].Id_contingencia.HasValue)
                         {
                             CamadaDados.Faturamento.Cadastros.TList_CadSequenciaNF lSeq =
                                 CamadaNegocio.Faturamento.Cadastros.TCN_CadSequenciaNF.Busca(lNFCe[0].Nr_serie,
                                                                                              lNFCe[0].Cd_modelo,
                                                                                              lNFCe[0].Cd_empresa,
                                                                                              null);
                             if (lSeq.Count > 0)
                             {
                                 if (lSeq[0].Seq_NotaFiscal.Equals(lNFCe[0].NR_NFCe))
                                 {
                                     lSeq[0].Seq_NotaFiscal--;
                                     CamadaNegocio.Faturamento.Cadastros.TCN_CadSequenciaNF.Gravar(lSeq[0], null);
                                     MessageBox.Show("Sequencia de numeração da serie voltada com sucesso.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 }
                                 else
                                 {
                                     //Buscar configuracao nfe
                                     CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfgNfe =
                                         CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar(lNFCe[0].Cd_empresa,
                                                                                               string.Empty,
                                                                                               string.Empty,
                                                                                               null);
                                     if (lCfgNfe.Count > 0)
                                     {
                                         try
                                         {
                                             //Inutilizar numero nota
                                             NFCe.InutilizaNFCe.TInutilizaNFCe.InutilizarNFCe(lCfgNfe[0].Cd_uf_empresa,
                                                                                              lCfgNfe[0].Cnpj_empresa,
                                                                                              lNFCe[0].Nr_serie,
                                                                                              lNFCe[0].Cd_modelo,
                                                                                              DateTime.Now.Year.ToString(),
                                                                                              lNFCe[0].NR_NFCe.Value,
                                                                                              lNFCe[0].NR_NFCe.Value,
                                                                                              "NUMERO INUTILIZADO DEVIDO A ERRO NA EMISSAO DA NFCe",
                                                                                              lCfgNfe[0]);
                                             MessageBox.Show("Numero INUTILIZADO com sucesso na receita.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                         }
                                         catch (Exception ex)
                                         { MessageBox.Show("Erro: " + ex.Message.Trim(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                                     }
                                 }
                             }
                         }
                         Close();
                     }
                 }
                 catch (Exception ex)
                 { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
             }
         }
     }
     else
     {
         CamadaDados.Faturamento.NotaFiscal.TList_RegLanFaturamento lNf =
             CamadaNegocio.Faturamento.NotaFiscal.TCN_LanFaturamento.Busca(cd_empresa.Text,
                                                                           nr_notafiscal.Text,
                                                                           cbSerie.SelectedValue.ToString(),
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           decimal.Zero,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           true,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           "S",
                                                                           string.Empty,
                                                                           "A",
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           decimal.Zero,
                                                                           decimal.Zero,
                                                                           string.Empty,
                                                                           "'P'",
                                                                           string.Empty,
                                                                           false,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           1,
                                                                           string.Empty,
                                                                           null);
         if (lNf.Count > 0)
         {
             try
             {
                 //Verificar se NFe ja nao foi cancelada junto a receita
                 CamadaDados.Faturamento.NFE.TList_EventoNFe lEvento =
                     CamadaNegocio.Faturamento.NFE.TCN_EventoNFe.Buscar(string.Empty,
                                                                        lNf[0].Cd_empresa,
                                                                        lNf[0].Nr_lanctofiscal.ToString(),
                                                                        string.Empty,
                                                                        string.Empty,
                                                                        "CA",
                                                                        string.Empty,
                                                                        null);
                 if (lEvento.Count.Equals(0) ? false : lEvento[0].St_registro.Trim().ToUpper().Equals("T"))
                 {
                     //Cancelar somente NFe no Aliance.NET
                     CamadaNegocio.Faturamento.NotaFiscal.TCN_LanFaturamento.CancelarFaturamento(lNf[0], null);
                     MessageBox.Show("NF-e cancelada com sucesso no sistema Aliance.NET", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                     //Cancelar pedido
                     CamadaDados.Faturamento.Pedido.TList_Pedido lPed =
                         CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Busca(lNf[0].Cd_empresa,
                                                                           string.Empty,
                                                                           lNf[0].Nr_pedidostring,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           false,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           decimal.Zero,
                                                                           decimal.Zero,
                                                                           string.Empty,
                                                                           string.Empty,
                                                                           false,
                                                                           1,
                                                                           string.Empty,
                                                                           null);
                     CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Deleta_Pedido(lPed[0], null);
                     //Cancelar venda rapida
                     CamadaDados.Faturamento.PDV.TList_VendaRapida lVenda =
                         new CamadaDados.Faturamento.PDV.TCD_VendaRapida().Select(
                             new TpBusca[]
                     {
                         new TpBusca()
                         {
                             vNM_Campo = string.Empty,
                             vOperador = "exists",
                             vVL_Busca = "(select 1 from tb_pdv_pedido_x_vendarapida x " +
                                         "where x.cd_empresa = a.cd_empresa " +
                                         "and x.id_vendarapida = a.id_cupom  " +
                                         "and x.nr_pedido = " + lNf[0].Nr_pedidostring + ")"
                         }
                     }, 0, string.Empty, string.Empty);
                     CamadaNegocio.Faturamento.PDV.TCN_VendaRapida.ExcluirVendaRapida(lVenda, null);
                     Close();
                 }
                 else
                 {
                     if (lEvento.Count.Equals(0))
                     {
                         InputBox ibp = new InputBox();
                         ibp.Text = "Motivo Cancelamento Nota Fiscal";
                         string motivo = ibp.ShowDialog();
                         if (string.IsNullOrEmpty(motivo))
                         {
                             MessageBox.Show("Obrigatorio informar motivo de cancelamento da nota fiscal.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             return;
                         }
                         if (motivo.Trim().Length < 15)
                         {
                             MessageBox.Show("Motivo de cancelamento deve ter mais que 15 caracteres.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             return;
                         }
                         //Buscar evento Carta Correcao
                         CamadaDados.Faturamento.Cadastros.TList_Evento lEv =
                             CamadaNegocio.Faturamento.Cadastros.TCN_Evento.Buscar(string.Empty, string.Empty, "CA", null);
                         if (lEv.Count.Equals(0))
                         {
                             MessageBox.Show("Não existe evento de CANCELAMENTO NFE cadastrado.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             return;
                         }
                         //Cancelar NFe Receita
                         CamadaDados.Faturamento.NFE.TRegistro_EventoNFe rEvento = new CamadaDados.Faturamento.NFE.TRegistro_EventoNFe();
                         rEvento.Cd_empresa       = lNf[0].Cd_empresa;
                         rEvento.Nr_lanctofiscal  = lNf[0].Nr_lanctofiscal;
                         rEvento.Chave_acesso_nfe = lNf[0].Chave_acesso_nfe;
                         rEvento.Nr_protocoloNfe  = lNf[0].Nr_protocolo;
                         rEvento.Dt_evento        = CamadaDados.UtilData.Data_Servidor();
                         rEvento.Ds_evento        = motivo;
                         rEvento.Cd_eventostr     = lEv[0].Cd_eventostr;
                         rEvento.Descricao_evento = lEv[0].Ds_evento;
                         rEvento.Tp_evento        = lEv[0].Tp_evento;
                         rEvento.St_registro      = "A";
                         CamadaNegocio.Faturamento.NFE.TCN_EventoNFe.Gravar(rEvento, null);
                         if (MessageBox.Show("Evento de CANCELAMENTO gravado com sucesso.\r\n" +
                                             "Deseja enviar o mesmo para a receita?", "Pergunta",
                                             MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                             == DialogResult.Yes)
                         {
                             //Buscar CfgNfe para a empresa
                             CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfg =
                                 CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar(lNf[0].Cd_empresa,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       null);
                             if (lCfg.Count.Equals(0))
                             {
                                 MessageBox.Show("Não existe configuração para envio de evento para a empresa " + lNf[0].Cd_empresa.Trim() + ".",
                                                 "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             }
                             else
                             {
                                 string msg = srvNFE.Evento.TEventoNFe.EnviarEvento(rEvento, lCfg[0]);
                                 if (!string.IsNullOrEmpty(msg))
                                 {
                                     MessageBox.Show("Erro ao enviar evento CANCELAMENTO para a receita.\r\n" +
                                                     "Aguarde um tempo e tente novamente.\r\n" +
                                                     "Erro: " + msg.Trim() + "\r\n" +
                                                     "Obs.: A NFe não será cancelada no sistema Aliance.NET enquanto a mesma não for cancelada junto a receita.",
                                                     "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                 }
                                 else
                                 {
                                     MessageBox.Show("Evento registrado e vinculado a NF-e.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     CamadaNegocio.Faturamento.NotaFiscal.TCN_LanFaturamento.CancelarFaturamento(lNf[0], null);
                                     MessageBox.Show("NF-e cancelada com sucesso no sistema Aliance.NET", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     //Cancelar pedido
                                     CamadaDados.Faturamento.Pedido.TList_Pedido lPed =
                                         new CamadaDados.Faturamento.Pedido.TCD_Pedido().Select(
                                             new TpBusca[]
                                     {
                                         new TpBusca()
                                         {
                                             vNM_Campo = "a.nr_pedido",
                                             vOperador = "=",
                                             vVL_Busca = lNf[0].Nr_pedidostring
                                         },
                                         new TpBusca()
                                         {
                                             vNM_Campo = string.Empty,
                                             vOperador = "exists",
                                             vVL_Busca = "(select 1 from tb_pdv_pedido_x_vendarapida x " +
                                                         "where x.nr_pedido = a.nr_pedido)"
                                         }
                                     }, 1, string.Empty);
                                     if (lPed.Count > 0)
                                     {
                                         CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Deleta_Pedido(lPed[0], null);
                                         //Cancelar venda rapida
                                         CamadaDados.Faturamento.PDV.TList_VendaRapida lVenda =
                                             new CamadaDados.Faturamento.PDV.TCD_VendaRapida().Select(
                                                 new TpBusca[]
                                         {
                                             new TpBusca()
                                             {
                                                 vNM_Campo = string.Empty,
                                                 vOperador = "exists",
                                                 vVL_Busca = "(select 1 from tb_pdv_pedido_x_vendarapida x " +
                                                             "where x.cd_empresa = a.cd_empresa " +
                                                             "and x.id_vendarapida = a.id_cupom  " +
                                                             "and x.nr_pedido = " + lNf[0].Nr_pedidostring + ")"
                                             }
                                         }, 0, string.Empty, string.Empty);
                                         CamadaNegocio.Faturamento.PDV.TCN_VendaRapida.ExcluirVendaRapida(lVenda, null);
                                     }
                                     //Cancelar venda rapida nota entrega futura
                                     CamadaDados.Faturamento.PDV.TList_VendaRapida lVendaEF =
                                         new CamadaDados.Faturamento.PDV.TCD_VendaRapida().Select(
                                             new TpBusca[]
                                     {
                                         new TpBusca()
                                         {
                                             vNM_Campo = string.Empty,
                                             vOperador = "exists",
                                             vVL_Busca = "(select 1 from tb_pdv_vendarapida_x_entregafutura x " +
                                                         "where x.cd_empresa = a.cd_empresa " +
                                                         "and x.id_cupom = a.id_cupom " +
                                                         "and x.cd_empresa = '" + lNf[0].Cd_empresa.Trim() + "' " +
                                                         "and x.nr_lanctofiscal = " + lNf[0].Nr_lanctofiscalstr + ")"
                                         }
                                     }, 0, string.Empty, string.Empty);
                                     CamadaNegocio.Faturamento.PDV.TCN_VendaRapida.ExcluirVendaRapida(lVendaEF, null);
                                     Close();
                                 }
                             }
                         }
                     }
                     else
                     {
                         //Buscar CfgNfe para a empresa
                         CamadaDados.Faturamento.Cadastros.TList_CfgNfe lCfg =
                             CamadaNegocio.Faturamento.Cadastros.TCN_CfgNfe.Buscar(lNf[0].Cd_empresa,
                                                                                   string.Empty,
                                                                                   string.Empty,
                                                                                   null);
                         if (lCfg.Count.Equals(0))
                         {
                             MessageBox.Show("Não existe configuração para envio de evento para a empresa " + lNf[0].Cd_empresa.Trim() + ".",
                                             "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         }
                         else
                         {
                             string msg = srvNFE.Evento.TEventoNFe.EnviarEvento(lEvento[0], lCfg[0]);
                             if (!string.IsNullOrEmpty(msg))
                             {
                                 MessageBox.Show("Erro ao enviar evento CANCELAMENTO para a receita.\r\n" +
                                                 "Aguarde um tempo e tente novamente.\r\n" +
                                                 "Erro: " + msg.Trim() + "\r\n" +
                                                 "Obs.: A NFe não será cancelada no sistema Aliance.NET enquanto a mesma não for cancelada junto a receita.",
                                                 "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                             }
                             else
                             {
                                 MessageBox.Show("Evento registrado e vinculado a NF-e.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 CamadaNegocio.Faturamento.NotaFiscal.TCN_LanFaturamento.CancelarFaturamento(lNf[0], null);
                                 MessageBox.Show("NF-e cancelada com sucesso no sistema Aliance.NET", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 //Cancelar pedido
                                 CamadaDados.Faturamento.Pedido.TList_Pedido lPed =
                                     CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Busca(lNf[0].Cd_empresa,
                                                                                       string.Empty,
                                                                                       lNf[0].Nr_pedidostring,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       false,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       decimal.Zero,
                                                                                       decimal.Zero,
                                                                                       string.Empty,
                                                                                       string.Empty,
                                                                                       false,
                                                                                       1,
                                                                                       string.Empty,
                                                                                       null);
                                 CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Deleta_Pedido(lPed[0], null);
                                 //Cancelar venda rapida
                                 CamadaDados.Faturamento.PDV.TList_VendaRapida lVenda =
                                     new CamadaDados.Faturamento.PDV.TCD_VendaRapida().Select(
                                         new TpBusca[]
                                 {
                                     new TpBusca()
                                     {
                                         vNM_Campo = string.Empty,
                                         vOperador = "exists",
                                         vVL_Busca = "(select 1 from tb_pdv_pedido_x_vendarapida x " +
                                                     "where x.cd_empresa = a.cd_empresa " +
                                                     "and x.id_vendarapida = a.id_cupom  " +
                                                     "and x.nr_pedido = " + lNf[0].Nr_pedidostring + ")"
                                     }
                                 }, 0, string.Empty, string.Empty);
                                 CamadaNegocio.Faturamento.PDV.TCN_VendaRapida.ExcluirVendaRapida(lVenda, null);
                                 Close();
                             }
                         }
                     }
                 }
             }
             catch (Exception ex)
             { MessageBox.Show("Erro: " + ex.Message.Trim()); }
         }
     }
 }
Exemple #3
0
        public static string ConsultaNFERecepcao(CamadaDados.Faturamento.Cadastros.TRegistro_CfgNfe rCfgNfe)
        {
            //Validar certificado
            srvNFE.ConsultaStatusServico.ConsultaStatusServico.ValidarCertificado(rCfgNfe);
            string msg = string.Empty;

            //Buscar Lotes aguardando processamento
            new CamadaDados.Faturamento.NFCe.TCD_LoteNFCe().Select(
                new Utils.TpBusca[]
            {
                new Utils.TpBusca()
                {
                    vNM_Campo = "a.st_registro",
                    vOperador = "=",
                    vVL_Busca = "'E'"
                },
                new Utils.TpBusca()
                {
                    vNM_Campo = "a.status",
                    vOperador = "<>",
                    vVL_Busca = "'215'"
                },
                new Utils.TpBusca()
                {
                    vNM_Campo = string.Empty,
                    vOperador = "exists",
                    vVL_Busca = "(select 1 from TB_FAT_Lote_X_NFCe x " +
                                "where x.id_lote = a.id_lote " +
                                "and x.cd_empresa = '" + rCfgNfe.Cd_empresa.Trim() + "')"
                }
            }, 0, string.Empty).ForEach(p =>
            {
                StringBuilder xml = new StringBuilder();
                xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
                xml.Append("<consReciNFe versao=\"" + rCfgNfe.Cd_versaonfce.Trim() + "\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">\n");
                xml.Append("<tpAmb>");
                xml.Append(p.Tp_ambiente.Trim());
                xml.Append("</tpAmb>\n");
                xml.Append("<nRec>");
                xml.Append(p.Nr_protocololote.ToString().PadLeft(15, '0'));
                xml.Append("</nRec>\n");
                xml.Append("</consReciNFe>\n");

                //Validar schema xml
                Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(),
                                                        rCfgNfe.Path_nfe_schemas.SeparadorDiretorio() + "consReciNFe_v" + rCfgNfe.Cd_versaonfce.Trim() + ".xsd",
                                                        "NFE");
                if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno))
                {
                    throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno);
                }

                //Conectar Web Service
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml.ToString());
                XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgNfe);

                //Tratar retorno
                if (retorno["cStat"].InnerText.Trim().Equals("104"))
                {
                    //Atualizar status do lote
                    NFCe.EnviaArq.TEnviaArq.GerarIdLote(p.Id_lote,
                                                        p.Nr_protocololote,
                                                        p.Dt_recebimento,
                                                        p.Tempomedio,
                                                        "P",
                                                        Convert.ToDecimal(retorno["cStat"].InnerText),
                                                        retorno["xMotivo"].InnerText,
                                                        rCfgNfe);
                    msg += "Lote: " + p.Id_lote.ToString() + "\r\nMensagem: " + retorno["xMotivo"].InnerText.Trim() + "\r\n";
                    //Tratar as Notas do Lote
                    foreach (XmlNode no in retorno.ChildNodes)
                    {
                        if (no.Name.Trim().Equals("protNFe"))
                        {
                            DateTime?dt_rec = null;
                            try
                            {
                                dt_rec = Convert.ToDateTime(no["infProt"]["dhRecbto"].InnerText);
                            }
                            catch { }
                            decimal nprot = decimal.Zero;
                            try
                            {
                                nprot = Convert.ToDecimal(no["infProt"]["nProt"].InnerText);
                            }
                            catch { }
                            decimal status = decimal.Zero;
                            try
                            {
                                status = Convert.ToDecimal(no["infProt"]["cStat"].InnerText);
                            }
                            catch { }
                            //Buscar NFCe
                            CamadaDados.Faturamento.PDV.TList_NFCe lNFCe =
                                new CamadaDados.Faturamento.PDV.TCD_NFCe().Select(
                                    new TpBusca[]
                            {
                                new TpBusca()
                                {
                                    vNM_Campo = "a.cd_empresa",
                                    vOperador = "=",
                                    vVL_Busca = "'" + rCfgNfe.Cd_empresa.Trim() + "'"
                                },
                                new TpBusca()
                                {
                                    vNM_Campo = "a.chave_acesso",
                                    vOperador = "=",
                                    vVL_Busca = "'" + no["infProt"]["chNFe"].InnerText + "'"
                                }
                            }, 1, string.Empty, string.Empty);
                            if (lNFCe.Count > 0)
                            {
                                EnviaArq.TEnviaArq.GravarLoteXNFCe(p.Id_lote.Value,
                                                                   lNFCe[0],
                                                                   dt_rec,
                                                                   nprot,
                                                                   (status.Equals(100) ? no["infProt"]["digVal"].InnerText : string.Empty),
                                                                   status,
                                                                   no["infProt"]["xMotivo"].InnerText,
                                                                   no["infProt"]["verAplic"].InnerText);
                                if (lNFCe[0].Id_contingencia.HasValue &&
                                    lNFCe[0].St_registro.Trim().ToUpper().Equals("C"))
                                {
                                    try
                                    {
                                        //Buscar evento de cancelamento
                                        CamadaDados.Faturamento.PDV.TList_EventoNFCe lEvento =
                                            CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Buscar(lNFCe[0].Cd_empresa,
                                                                                                lNFCe[0].Id_nfcestr,
                                                                                                string.Empty,
                                                                                                null);
                                        if (lEvento.Count > 0)
                                        {
                                            if (!lEvento[0].St_registro.Trim().ToUpper().Equals("T"))
                                            {
                                                lEvento[0].Chave_acesso_nfce = retorno["protNFe"]["infProt"]["chNFe"].InnerText;
                                                EventoNFCe.TEventoNFCe.EnviarEvento(lEvento[0], rCfgNfe);
                                            }
                                        }
                                    }
                                    catch { }
                                }
                            }
                        }
                    }
                }
                else
                {
                    EnviaArq.TEnviaArq.GerarIdLote(p.Id_lote,
                                                   p.Nr_protocololote,
                                                   p.Dt_recebimento,
                                                   p.Tempomedio,
                                                   p.St_registro,
                                                   Convert.ToDecimal(retorno["cStat"].InnerText),
                                                   retorno["xMotivo"].InnerText,
                                                   rCfgNfe);
                }
            });
            return(msg);
        }
Exemple #4
0
        public static bool EnviarLote(decimal?Id_lote,
                                      List <CamadaDados.Faturamento.PDV.TRegistro_NFCe> lNFCe)
        {
            bool ret = false;

            if (lNFCe.Count > 0)
            {
                //Validar Certificado
                srvNFE.ConsultaStatusServico.ConsultaStatusServico.ValidarCertificado(lNFCe[0].rCfgNFCe);
                //Verificar status do servico junto a receita
                if (ConsultaStatusServico.TConsultaStatusServico.StatusServico(lNFCe[0].rCfgNFCe).Trim() != "107")
                {
                    throw new Exception("Serviço indisponivel no momento.\r\nAguarde alguns minutos e tente novamente.");
                }
                GerarXML.TGerarXML.GerarXML(lNFCe);

                StringBuilder xml = new StringBuilder();
                xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
                #region enviNFe
                xml.Append("<enviNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"" + lNFCe[0].rCfgNFCe.Cd_versaonfce.Trim() + "\">\n");
                if (!Id_lote.HasValue)
                {
                    Id_lote = GerarIdLote(null,
                                          null,
                                          null,
                                          decimal.Zero,
                                          "A",
                                          null,
                                          string.Empty,
                                          lNFCe[0].rCfgNFCe);
                }
                if (!Id_lote.HasValue)
                {
                    throw new Exception("Erro gerar Id. do lote");
                }
                #region "idLote"
                xml.Append("<idLote>");
                xml.Append(Id_lote.ToString().PadLeft(15, '0'));
                xml.Append("</idLote>\n");
                #endregion
                #region indSinc
                xml.Append("<indSinc>");
                xml.Append(lNFCe.Count > 1 ? "0" : "1");
                xml.Append("</indSinc>");
                #endregion
                lNFCe.ForEach(p =>
                {
                    XmlDocument documento = new XmlDocument();
                    documento.LoadXml(p.XmlNFCe);
                    //Gravar lote x nota fiscal
                    GravarLoteXNFCe(Id_lote.Value,
                                    p,
                                    null,
                                    decimal.Zero,
                                    string.Empty,
                                    decimal.Zero,
                                    string.Empty,
                                    string.Empty);
                    xml.Append(p.XmlNFCe + "\n");
                });
                xml.Append("</enviNFe>\n");
                #endregion

                //Validar Arquivo Lote
                Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(),
                                                        lNFCe[0].rCfgNFCe.Path_nfe_schemas.SeparadorDiretorio() + "enviNFe_v" + lNFCe[0].rCfgNFCe.Cd_versaonfce.Trim() + ".xsd",
                                                        "NFE");
                if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno))
                {
                    throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim());
                }
                try
                {
                    //Enviar Lote para Receita
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(xml.ToString());
                    XmlNode retorno = ConectarWebService(doc.DocumentElement, lNFCe[0].rCfgNFCe);
                    //Tratar retorno
                    if (retorno != null)
                    {
                        if (retorno["cStat"].InnerText.Trim().Equals("103") ||
                            retorno["cStat"].InnerText.Trim().Equals("104"))
                        {
                            //Lote recebido com sucesso
                            //Gravar dados do lote no banco de dados
                            decimal? nRec     = null;
                            DateTime?dhRecbto = null;
                            decimal? tMed     = null;
                            try
                            {
                                dhRecbto = Convert.ToDateTime(retorno["dhRecbto"].InnerText);
                            }
                            catch { }
                            if (retorno.InnerXml.Contains("infRec"))
                            {
                                nRec = Convert.ToDecimal(retorno["infRec"]["nRec"].InnerText);
                                tMed = Convert.ToDecimal(retorno["infRec"]["tMed"].InnerText);
                            }
                            else if (retorno.InnerXml.Contains("protNFe"))
                            {
                                DateTime?dt_rec = null;
                                try
                                {
                                    dt_rec = Convert.ToDateTime(retorno["protNFe"]["infProt"]["dhRecbto"].InnerText);
                                    lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Dt_processamento = dt_rec;
                                }
                                catch { }
                                decimal nprot = decimal.Zero;
                                try
                                {
                                    nprot = Convert.ToDecimal(retorno["protNFe"]["infProt"]["nProt"].InnerText);
                                    lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Nr_protocolo = nprot;
                                }
                                catch { }
                                decimal status = decimal.Zero;
                                try
                                {
                                    status = Convert.ToDecimal(retorno["protNFe"]["infProt"]["cStat"].InnerText);
                                    if (status.Equals(100))
                                    {
                                        lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Digval =
                                            retorno["protNFe"]["infProt"]["digVal"].InnerText;
                                    }
                                }
                                catch { }
                                GravarLoteXNFCe(Id_lote.Value,
                                                lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)),
                                                dt_rec,
                                                nprot,
                                                (status.Equals(100) ? retorno["protNFe"]["infProt"]["digVal"].InnerText : string.Empty),
                                                status,
                                                retorno["protNFe"]["infProt"]["xMotivo"].InnerText,
                                                retorno["protNFe"]["infProt"]["verAplic"].InnerText);
                                if (lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Id_contingencia.HasValue&&
                                    lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).St_registro.Trim().ToUpper().Equals("C"))
                                {
                                    try
                                    {
                                        //Buscar evento de cancelamento
                                        CamadaDados.Faturamento.PDV.TList_EventoNFCe lEvento =
                                            CamadaNegocio.Faturamento.PDV.TCN_EventoNFCe.Buscar(lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Cd_empresa,
                                                                                                lNFCe.Find(p => p.Chave_acesso.Trim().Equals(retorno["protNFe"]["infProt"]["chNFe"].InnerText)).Id_nfcestr,
                                                                                                string.Empty,
                                                                                                null);
                                        if (lEvento.Count > 0)
                                        {
                                            if (!lEvento[0].St_registro.Trim().ToUpper().Equals("T"))
                                            {
                                                lEvento[0].Chave_acesso_nfce = retorno["protNFe"]["infProt"]["chNFe"].InnerText;
                                                NFCe.EventoNFCe.TEventoNFCe.EnviarEvento(lEvento[0], lNFCe[0].rCfgNFCe);
                                            }
                                        }
                                    }
                                    catch { }
                                }
                                ret = true;
                            }
                            GerarIdLote(Id_lote,
                                        nRec,
                                        dhRecbto,
                                        tMed,
                                        ret ? "P" : "E",
                                        Convert.ToDecimal(retorno["cStat"].InnerText),
                                        retorno["xMotivo"].InnerText,
                                        lNFCe[0].rCfgNFCe);
                            //Gravar xml e chave acesso no banco
                            lNFCe.ForEach(p =>
                            {
                                CamadaDados.TDataQuery query    = new CamadaDados.TDataQuery();
                                System.Collections.Hashtable hs = new System.Collections.Hashtable(3);
                                hs.Add("@CHAVE", p.Chave_acesso);
                                hs.Add("@CD_EMPRESA", p.Cd_empresa);
                                hs.Add("@ID_NFCE", p.Id_nfce);
                                query.executarSql("update tb_pdv_nfce set chave_acesso = @CHAVE, dt_alt = getdate() " +
                                                  "where cd_empresa = @CD_EMPRESA and id_nfce = @ID_NFCE", hs);
                                new CamadaDados.Faturamento.PDV.TCD_XML_NFCe()
                                .Gravar(new CamadaDados.Faturamento.PDV.TRegistro_XML_NFCe
                                {
                                    Cd_empresa = p.Cd_empresa,
                                    Id_nfce    = p.Id_nfce,
                                    Xml_nfce   = p.XmlNFCe
                                });
                            });
                        }
                        else
                        {
                            //Erro no envio do lote
                            //Gravar mensagem de erro de envio do lote
                            GerarIdLote(Id_lote,
                                        null,
                                        null,
                                        null,
                                        "A",
                                        Convert.ToDecimal(retorno["cStat"].InnerText),
                                        retorno["xMotivo"].InnerText,
                                        lNFCe[0].rCfgNFCe);
                        }
                    }
                    else
                    {
                        throw new Exception("Serviço Enviar NFC-e indisponivel no momento.");
                    }
                }
                catch (Exception ex)
                {
                    DeletarNFCeLotesProblemas(lNFCe[0].rCfgNFCe);
                    DeletarLotesProblemas(lNFCe[0].rCfgNFCe);
                    throw new Exception(ex.Message.Trim());
                }
            }
            return(ret);
        }