Exemplo n.º 1
0
        /// <summary>
        /// Consulta situação do CTe
        /// </summary>
        /// <param name="idNf"></param>
        public static string ConsultaSitCTe(uint idCte)
        {
            ConhecimentoTransporte cte = ConhecimentoTransporteDAO.Instance.GetElement(idCte);

            #region Monta XML

            XmlDocument xmlConsSitCTe   = new XmlDocument();
            XmlNode     declarationNode = xmlConsSitCTe.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlConsSitCTe.AppendChild(declarationNode);

            XmlElement consSitCTe = xmlConsSitCTe.CreateElement("consSitCTe");
            consSitCTe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/cte");
            consSitCTe.SetAttribute("versao", ConfigCTe.VersaoConsulta);
            xmlConsSitCTe.AppendChild(consSitCTe);

            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "tpAmb", ((int)ConfigCTe.TipoAmbiente).ToString());
            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "xServ", "CONSULTAR");
            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "chCTe", cte.ChaveAcesso);

            #endregion

            // Salva o callback padrão do WebService
            System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

            XmlNode xmlRetorno = null;

            try
            {
                // Altera o callback de validação do WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                {
                    // Verifica se a data do certificado é válida
                    DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                    DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                    bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                    // Retorna o resultado da função
                    return(isDateValid);
                };

                #region Envia o arquivo e recebe o retorno

                var participante = ParticipanteCteDAO.Instance.GetParticipanteByIdCteTipo(cte.IdCte, (int)ParticipanteCte.TipoParticipanteEnum.Emitente);

                string uf = LojaDAO.Instance.GetElement(participante.IdLoja.Value).Uf.ToUpper();

                if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.Normal)
                {
                    if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao)
                    {
                        switch (uf)
                        {
                        case "MT":
                            xmlRetorno = GetWebService.PMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MS":
                            xmlRetorno = GetWebService.PMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MG":
                            xmlRetorno = GetWebService.PMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "PR":
                            xmlRetorno = GetWebService.PPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "RS":
                            xmlRetorno = GetWebService.PRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "SP":
                            xmlRetorno = GetWebService.PSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AP":
                        case "PE":
                        case "RR":
                            xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                    else
                    {
                        switch (uf)
                        {
                        //case "MT":
                        //    xmlRetorno = GetWebService.HMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        case "MS":
                            xmlRetorno = GetWebService.HMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MG":
                            xmlRetorno = GetWebService.HMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "PR":
                            xmlRetorno = GetWebService.HPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "RS":
                            xmlRetorno = GetWebService.HRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "SP":
                            xmlRetorno = GetWebService.HSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AP":
                        case "PE":
                        case "RR":
                            xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                }
                else if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcRs ||
                         cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcSp)
                {
                    if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao)
                    {
                        switch (uf)
                        {
                        case "AP":
                        case "MT":
                        case "MS":
                        case "PE":
                        case "RR":
                        case "SP":
                            xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "MG":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "PR":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "RS":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                    else
                    {
                        switch (uf)
                        {
                        case "AP":
                        case "MT":
                        case "MS":
                        case "PE":
                        case "RR":
                        case "SP":
                            xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "MG":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "PR":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "RS":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex));
            }
            finally
            {
                // Restaura o callback padrão para o WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
            }

            if (xmlRetorno == null)
            {
                throw new Exception("Falha ao comunicar com webservice da SEFAZ.");
            }

            string codStatus = xmlRetorno["cStat"].InnerXml;

            // Executa ações de acordo com o retorno dado
            ConhecimentoTransporteDAO.Instance.RetornoConsSitCTe(idCte, xmlRetorno);

            if (codStatus == "100" || codStatus == "150") // CTe Autorizado
            {
                return("CTe está autorizada para uso.");
            }
            else // CTe rejeitado
            {
                string msgErro = "Falha na consulta. ";

                if (codStatus == "215" || codStatus == "516" || codStatus == "517" || codStatus == "545")
                {
                    msgErro += "Mensagem de consulta inválida. ";
                }

                return(msgErro + xmlRetorno["cStat"].InnerXml + " - " + CustomizaMensagemRejeicao(idCte, xmlRetorno["xMotivo"].InnerXml));
            }
        }