Esempio n. 1
0
 public static bool CanceladaPorEvento(this NotaFiscal oNFe, ClientEnvironment clientEnvironment)
 {
     return(oNFe.CarregarEventos(clientEnvironment).Exists(ev => ev.tpEvento == TEventoInfEventoTpEvento.Cancelamento &&
                                                           (ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado135 ||
                                                            ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado136 ||
                                                            ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado155)));
 }
        private void DoRefresh()
        {
            ClientEnvironment manager = null;

            try
            {
                manager = Conexao.CreateManager(Program.ConAux);

                oNFe = (NotaFiscal)NotaFiscalDAL.Instance.Find(oNFe.GetKeyString(), manager);


                txChaveNota.Text = oNFe.chaveNota;
                txLote.Text      = oNFe.numeroLote.ToString();
                txCodSit.Text    = oNFe.codigoSituacao.ToString();
                txDatSit.Text    = oNFe.dataSituacao.ToString();
                txDesSit.Text    = oNFe.descricaoSituacao;

                if (!String.IsNullOrEmpty(oNFe.cStat))
                {
                    txcStat.Text = oNFe.cStat;
                }
                if (!String.IsNullOrEmpty(oNFe.xMotivo))
                {
                    txxMotivo.Text = oNFe.xMotivo;
                }
                if (!String.IsNullOrEmpty(oNFe.nProt))
                {
                    txnProt.Text = oNFe.nProt;
                }
                if (!String.IsNullOrEmpty(oNFe.nProtCancelamento))
                {
                    txnProtCanc.Text = oNFe.nProtCancelamento;
                }



                System.Xml.XmlDocument xmlNota = new System.Xml.XmlDocument();
                xmlNota.LoadXml(oNFe.xmlNota);
                NFeUtils.PopulaTreeView(xmlNota, tvXmlNota);
                if (oNFe.codigoSituacao == TipoSituacaoNota.XMLInvalido) //xml invalido
                {
                    tvProcFinal.Visible = false;
                    tbProcFinal.Visible = true;
                    tbProcFinal.Text    = oNFe.xmlProcesso;
                }
                else if (!String.IsNullOrEmpty(oNFe.xmlProcesso))
                {
                    xmlNota.LoadXml(oNFe.xmlProcesso);
                    NFeUtils.PopulaTreeView(xmlNota, tvProcFinal);
                }


                //carregar eventos
                dgvEventos.AutoGenerateColumns = false;
                dgvEventos.DataSource          = oNFe.CarregarEventos(manager);


                System.Xml.XmlDocument xmlCancelamento = new System.Xml.XmlDocument();
                if (!String.IsNullOrEmpty(oNFe.xmlPedidoCancelamento))
                {
                    xmlCancelamento.LoadXml(oNFe.xmlPedidoCancelamento);
                    NFeUtils.PopulaTreeView(xmlCancelamento, tvXmlCancelamento);
                }
                if (!String.IsNullOrEmpty(oNFe.xmlProcessoCancelamento))
                {
                    xmlCancelamento.LoadXml(oNFe.xmlProcessoCancelamento);
                    NFeUtils.PopulaTreeView(xmlCancelamento, tvProcCancelamento);
                }
                xmlCancelamento = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Conexao.DisposeManager(manager);
            }
        }
        void oFrm_DoOnOkEvtCanc_Click(object sender, EventArgs e)
        {
            ClientEnvironment manager = null;
            Parametro         oParam  = null;

            try
            {
                if (String.IsNullOrEmpty(oFrm.TextResposta.Text))
                {
                    throw new Exception("Motivo não foi informado.");
                }

                manager = Conexao.CreateManager(Program.ConAux);
                oParam  = Program.GetParametro(Program.empresaSelecionada, manager);


                //verificar se já existe algum evento desse tipo registrado para a NFe
                //verificar nSeqEvento
                int nSeqEvento = oNFe.CarregarEventos(manager)
                                 .Count(ev => ev.tpEvento == TEventoInfEventoTpEvento.Cancelamento &&
                                        (ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado135 ||
                                         ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado136 ||
                                         ev.codigoSituacao == TipoSituacaoEvento.FinalizadoAprovado155))
                                 + 1;

                var oEvento  = (ITEvento)XMLUtils.XMLFactory(oParam.versao, "TEvento");
                var oProtNFe = (ITProtNFe)XMLUtils.CarregaXML_STR(oNFe.xmlProcesso, oNFe.versao, "TProtNFe");

                //carregar dados do evento - Cancelamento
                oEvento.versao    = oParam.versaoDadosEventos;
                oEvento.infEvento = (ITEventoInfEvento)XMLUtils.XMLFactory(oParam.versao, "TEventoInfEvento");
                //“ID” + tpEvento + chave da NF-e + nSeqEvento
                oEvento.infEvento.Id = String.Format("ID110111{0}{1:00}", oProtNFe.infProt.chNFe, nSeqEvento);

                oEvento.infEvento.cOrgao = oParam.UF.ToCOrgaoIBGE();
                oEvento.infEvento.tpAmb  = oProtNFe.infProt.tpAmb;

                oEvento.infEvento.Item            = oNFe.chaveNota.Substring(9, 14);
                oEvento.infEvento.ItemElementName = ITCTypeCNPJCPF.CNPJ;
                oEvento.infEvento.chNFe           = oProtNFe.infProt.chNFe;

                //Data e hora do evento no formato AAAA-MM-DDThh:mm:ssTZD
                //(UTC - Universal Coordinated Time, onde TZD pode ser -02:00 (Fernando de Noronha),
                //-03:00 (Brasília) ou -04:00 (Manaus), no horário de verão serão -01:00, -02:00 e -03:00.
                //Ex.: 2010-08-19T13:00:15-03:00.
                oEvento.infEvento.dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzzz");

                oEvento.infEvento.tpEvento             = TEventoInfEventoTpEvento.Cancelamento.GetXmlEnumAttributeValueFromEnum();
                oEvento.infEvento.nSeqEvento           = nSeqEvento.ToString();
                oEvento.infEvento.verEvento            = TEventoInfEventoVerEvento.Item100;
                oEvento.infEvento.detEvento            = (ITEventoInfEventoDetEvento)XMLUtils.XMLFactory(oParam.versao, "TEventoInfEventoDetEvento");
                oEvento.infEvento.detEvento.descEvento = TEventoInfEventoDetEventoDescEvento.Cancelamento.GetXmlEnumAttributeValueFromEnum();
                oEvento.infEvento.detEvento.versao     = TEventoInfEventoDetEventoVersao.Item100;

                oEvento.infEvento.detEvento.nProt = oProtNFe.infProt.nProt;
                oEvento.infEvento.detEvento.xJust = oFrm.TextResposta.Text.Trim();
                oProtNFe = null;

                //salvar na caixa de entrada
                var date = DateTime.Now;
                XMLUtils.SalvaXML(oParam.pastaEntrada + "evtCanc_" + date.ToString("yyMMdd") + oParam.empresa + date.Ticks.ToString() + ".xml", oEvento, oParam.versao);

                String msgRet = "Pedido gerado com sucesso!";
                if (!Program.empresasHabilitadas.First(em => em.cnpj == Program.empresaSelecionada).AutomacaoHabilitada&& !Program.ServicoHabilitado)
                {
                    msgRet += " Automação esta desabilitada. Favor Iniciar Automação para enviar pedido.";
                }

                MessageBox.Show(msgRet);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                oFrm.Close();
                oFrm.Dispose();
                Conexao.DisposeManager(manager);
            }
        }