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