private static async Task CriarEnviarCTeConsultaReciboAutomatico2e3() { var config = new ConfiguracaoDao().BuscarConfiguracao(); //CarregarConfiguracoes(config); var configuracaoServico = MontarConfiguracoes(config); #region infCte var cteEletronico = new CteEletronico { infCte = new infCte { versao = config.ConfigWebService.Versao, ide = new ide(configuracaoServico) { cUF = config.Empresa.SiglaUf, cCT = GetRandom(), CFOP = 5353, natOp = "PRESTAÇÃO DE SERVICO DE TRANSPORTE CT-E EXEMPLO" } } }; #endregion #region ide if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.ide.forPag = forPag.Pago; } cteEletronico.infCte.ide.mod = ModeloDocumento.CTe; cteEletronico.infCte.ide.serie = config.ConfigWebService.Serie; cteEletronico.infCte.ide.nCT = config.ConfigWebService.Numeracao; cteEletronico.infCte.ide.dhEmi = DateTimeOffset.Now; cteEletronico.infCte.ide.tpImp = tpImp.Retrado; cteEletronico.infCte.ide.tpEmis = tpEmis.teNormal; cteEletronico.infCte.ide.tpAmb = config.ConfigWebService.Ambiente; // o serviço adicionara automaticamente isso para você cteEletronico.infCte.ide.tpCTe = tpCTe.Normal; cteEletronico.infCte.ide.procEmi = procEmi.AplicativoContribuinte; cteEletronico.infCte.ide.verProc = "0.0.0.1"; cteEletronico.infCte.ide.cMunEnv = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunEnv = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFEnv = config.Empresa.SiglaUf; cteEletronico.infCte.ide.modal = modal.rodoviario; cteEletronico.infCte.ide.tpServ = tpServ.normal; cteEletronico.infCte.ide.cMunIni = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunIni = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFIni = config.Empresa.SiglaUf; cteEletronico.infCte.ide.cMunFim = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunFim = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFFim = config.Empresa.SiglaUf; cteEletronico.infCte.ide.retira = retira.Nao; switch (config.ConfigWebService.Versao) { case versao.ve300: cteEletronico.infCte.ide.indIEToma = indIEToma.ContribuinteIcms; cteEletronico.infCte.ide.tomaBase3 = new toma3 { toma = toma.Remetente }; break; case versao.ve200: cteEletronico.infCte.ide.tomaBase3 = new toma03 { toma = toma.Remetente }; break; } #endregion #region emit cteEletronico.infCte.emit = new emit { CNPJ = config.Empresa.Cnpj, IE = config.Empresa.InscricaoEstadual, xNome = config.Empresa.Nome, xFant = config.Empresa.NomeFantasia, enderEmit = new enderEmit { xLgr = config.Empresa.Logradouro, nro = config.Empresa.Numero, xCpl = config.Empresa.Complemento, xBairro = config.Empresa.Bairro, cMun = config.Empresa.CodigoIbgeMunicipio, xMun = config.Empresa.NomeMunicipio, CEP = long.Parse(config.Empresa.Cep), UF = config.Empresa.SiglaUf, fone = config.Empresa.Telefone } }; #endregion // Remetente , no caso adicionei os mesmos dados do emitente.. mas seriam o do remente. #region rem cteEletronico.infCte.rem = new rem { CNPJ = config.Empresa.Cnpj, IE = config.Empresa.InscricaoEstadual, xNome = config.Empresa.Nome, xFant = config.Empresa.NomeFantasia, fone = config.Empresa.Telefone, enderReme = new enderReme { xLgr = config.Empresa.Logradouro, nro = config.Empresa.Numero, xCpl = config.Empresa.Complemento, xBairro = config.Empresa.Bairro, cMun = config.Empresa.CodigoIbgeMunicipio, xMun = config.Empresa.NomeMunicipio, CEP = long.Parse(config.Empresa.Cep), UF = config.Empresa.SiglaUf } }; #endregion // Destinatário #region dest cteEletronico.infCte.dest = new dest { CNPJ = config.Empresa.Cnpj, IE = config.Empresa.InscricaoEstadual, xNome = config.Empresa.Nome, fone = config.Empresa.Telefone, enderDest = new enderDest { xLgr = config.Empresa.Logradouro, nro = config.Empresa.Numero, xCpl = config.Empresa.Complemento, xBairro = config.Empresa.Bairro, cMun = config.Empresa.CodigoIbgeMunicipio, xMun = config.Empresa.NomeMunicipio, CEP = long.Parse(config.Empresa.Cep), UF = config.Empresa.SiglaUf } }; #endregion #region vPrest cteEletronico.infCte.vPrest = new vPrest { vTPrest = 100m, vRec = 100m }; #endregion #region imp cteEletronico.infCte.imp = new imp { ICMS = new ICMS() }; var icmsSimplesNacional = new ICMSSN(); cteEletronico.infCte.imp.ICMS.TipoICMS = icmsSimplesNacional; if (config.ConfigWebService.Versao == versao.ve300) { icmsSimplesNacional.CST = CST.ICMS90; } #endregion #region infCTeNorm cteEletronico.infCte.infCTeNorm = new infCTeNorm { infCarga = new infCarga { vCarga = 1000m, proPred = "Linguiça com piqui", infQ = new List <infQ> { new infQ { cUnid = cUnid.KG, qCarga = 10000, tpMed = "quilos gramas" } } } }; cteEletronico.infCte.infCTeNorm.infDoc = new infDoc { infNFe = new List <infNFe> { new infNFe { chave = "52161021025760000123550010000087341557247948" } } }; if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.infCTeNorm.seg = new List <seg> { new seg { respSeg = respSeg.Destinatario } } } ; cteEletronico.infCte.infCTeNorm.infModal = new infModal(); switch (config.ConfigWebService.Versao) { case versao.ve200: cteEletronico.infCte.infCTeNorm.infModal.versaoModal = versaoModal.veM200; break; case versao.ve300: cteEletronico.infCte.infCTeNorm.infModal.versaoModal = versaoModal.veM300; break; } var rodoviario = new rodo { RNTRC = config.Empresa.RNTRC }; if (config.ConfigWebService.Versao == versao.ve200) { rodoviario.dPrev = DateTime.Now; rodoviario.lota = lota.Nao; } cteEletronico.infCte.infCTeNorm.infModal.ContainerModal = rodoviario; #endregion var numeroLote = RequisitarInput("Número Lote"); var servico = new ServicoEnviarCte(); var retorno = await servico.EnviarAsync(Convert.ToInt32(numeroLote), cteEletronico, configuracaoServico); var xmlRetorno = string.Empty; if (retorno.CteProc != null) { xmlRetorno = retorno.CteProc.ObterXmlString(); } if (retorno.RetConsReciCTe.protCTe[0].infProt.cStat != 100) { xmlRetorno = retorno.RetConsReciCTe.RetornoXmlString; } OnSucessoSync(new RetornoEEnvio(retorno.RetEnviCte.EnvioXmlString, xmlRetorno)); config.ConfigWebService.Numeracao++; new ConfiguracaoDao().SalvarConfiguracao(config); }
public static string Chave(this CteEletronica cte) { var chave = cte.infCte.Id.Substring(3, 44); return(chave); }
//Vou manter para evitar quebra de código pois a classe e o metodo são publicos public static eventoCTe CriaEvento(CTeEletronico cte, CTeTipoEvento cTeTipoEvento, int sequenciaEvento, EventoContainer container, ConfiguracaoServico configuracaoServico = null) { return(CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico)); }
//Vou manter para evitar quebra de código pois a classe e o metodo são publicos public static eventoCTe CriaEvento(CTeEletronico cte, CTeTipoEvento cTeTipoEvento, int sequenciaEvento, EventoContainer container) { return(CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container)); }
/// <summary> /// Gera id, cdv, assina e faz alguns ajustes nos dados da classe CTe antes de utilizá-la /// </summary> /// <param name="cte"></param> /// <returns>Retorna um objeto CTe devidamente tradado</returns> public static void ValidaSchema(this CteEletronica cte) { if (cte == null) { throw new ArgumentNullException("cte"); } var xmlValidacao = cte.ObterXmlString(); switch (cte.infCte.versao) { case versao.ve200: Validador.Valida(xmlValidacao, "cte_v2.00.xsd"); break; case versao.ve300: Validador.Valida(xmlValidacao, "cte_v3.00.xsd"); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + "versão 2.00 é 3.00"); } if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal { var xmlModal = FuncoesXml.ClasseParaXmlString(cte.infCte.infCTeNorm.infModal); switch (cte.infCte.infCTeNorm.infModal.versaoModal) { case versaoModal.veM200: if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) { Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) { Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) { Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) { Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) { Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) { Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd"); } break; case versaoModal.veM300: if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo)) { Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav)) { Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto)) { Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov)) { Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo)) { Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal)) { Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd"); } if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS)) { Validador.Valida(xmlModal, "cteModalRodoviarioOS_v.3.00.xsd"); } break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + "versão 2.00 é 3.00"); } } }
public void CriarEnviarCTe2e3() { var config = new ConfiguracaoDao().BuscarConfiguracao(); CarregarConfiguracoes(config); var cteEletronico = new CteEletronico(); #region infCte cteEletronico.infCte = new infCte(); cteEletronico.infCte.versao = config.ConfigWebService.Versao; #endregion #region ide cteEletronico.infCte.ide = new ide(); cteEletronico.infCte.ide.cUF = config.Empresa.SiglaUf; cteEletronico.infCte.ide.cCT = GetRandom(); cteEletronico.infCte.ide.CFOP = 5353; cteEletronico.infCte.ide.natOp = "PRESTAÇÃO DE SERVICO DE TRANSPORTE CT-E EXEMPLO"; if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.ide.forPag = forPag.Pago; } cteEletronico.infCte.ide.mod = ModeloDocumento.CTe; cteEletronico.infCte.ide.serie = config.ConfigWebService.Serie; cteEletronico.infCte.ide.nCT = config.ConfigWebService.Numeracao; cteEletronico.infCte.ide.dhEmi = DateTime.Now; cteEletronico.infCte.ide.tpImp = tpImp.Retrado; cteEletronico.infCte.ide.tpEmis = tpEmis.teNormal; cteEletronico.infCte.ide.tpAmb = config.ConfigWebService.Ambiente; // o serviço adicionara automaticamente isso para você cteEletronico.infCte.ide.tpCTe = tpCTe.Normal; cteEletronico.infCte.ide.procEmi = procEmi.AplicativoContribuinte; cteEletronico.infCte.ide.verProc = "0.0.0.1"; cteEletronico.infCte.ide.cMunEnv = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunEnv = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFEnv = config.Empresa.SiglaUf; cteEletronico.infCte.ide.modal = modal.rodoviario; cteEletronico.infCte.ide.tpServ = tpServ.normal; cteEletronico.infCte.ide.cMunIni = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunIni = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFIni = config.Empresa.SiglaUf; cteEletronico.infCte.ide.cMunFim = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.ide.xMunFim = config.Empresa.NomeMunicipio; cteEletronico.infCte.ide.UFFim = config.Empresa.SiglaUf; cteEletronico.infCte.ide.retira = retira.Nao; if (config.ConfigWebService.Versao == versao.ve300) { cteEletronico.infCte.ide.indIEToma = indIEToma.ContribuinteIcms; } if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.ide.tomaBase3 = new toma03 { toma = toma.Remetente }; } if (config.ConfigWebService.Versao == versao.ve300) { cteEletronico.infCte.ide.tomaBase3 = new toma3 { toma = toma.Remetente }; } #endregion #region emit cteEletronico.infCte.emit = new emit(); cteEletronico.infCte.emit.CNPJ = config.Empresa.Cnpj; cteEletronico.infCte.emit.IE = config.Empresa.InscricaoEstadual; cteEletronico.infCte.emit.xNome = config.Empresa.Nome; cteEletronico.infCte.emit.xFant = config.Empresa.NomeFantasia; cteEletronico.infCte.emit.enderEmit = new enderEmit(); cteEletronico.infCte.emit.enderEmit.xLgr = config.Empresa.Logradouro; cteEletronico.infCte.emit.enderEmit.nro = config.Empresa.Numero; cteEletronico.infCte.emit.enderEmit.xCpl = config.Empresa.Complemento; cteEletronico.infCte.emit.enderEmit.xBairro = config.Empresa.Bairro; cteEletronico.infCte.emit.enderEmit.cMun = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.emit.enderEmit.xMun = config.Empresa.NomeMunicipio; cteEletronico.infCte.emit.enderEmit.CEP = long.Parse(config.Empresa.Cep); cteEletronico.infCte.emit.enderEmit.UF = config.Empresa.SiglaUf; cteEletronico.infCte.emit.enderEmit.fone = config.Empresa.Telefone; #endregion // Remetente , no caso adicionei os mesmos dados do emitente.. mas seriam o do remente. #region rem cteEletronico.infCte.rem = new rem(); cteEletronico.infCte.rem.CNPJ = config.Empresa.Cnpj; cteEletronico.infCte.rem.IE = config.Empresa.InscricaoEstadual; cteEletronico.infCte.rem.xNome = config.Empresa.Nome; cteEletronico.infCte.rem.xFant = config.Empresa.NomeFantasia; cteEletronico.infCte.rem.fone = config.Empresa.Telefone; cteEletronico.infCte.rem.enderReme = new enderReme(); cteEletronico.infCte.rem.enderReme.xLgr = config.Empresa.Logradouro; cteEletronico.infCte.rem.enderReme.nro = config.Empresa.Numero; cteEletronico.infCte.rem.enderReme.xCpl = config.Empresa.Complemento; cteEletronico.infCte.rem.enderReme.xBairro = config.Empresa.Bairro; cteEletronico.infCte.rem.enderReme.cMun = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.rem.enderReme.xMun = config.Empresa.NomeMunicipio; cteEletronico.infCte.rem.enderReme.CEP = long.Parse(config.Empresa.Cep); cteEletronico.infCte.rem.enderReme.UF = config.Empresa.SiglaUf; #endregion // Destinatário #region dest cteEletronico.infCte.dest = new dest(); cteEletronico.infCte.dest.CNPJ = config.Empresa.Cnpj; cteEletronico.infCte.dest.IE = config.Empresa.InscricaoEstadual; cteEletronico.infCte.dest.xNome = config.Empresa.Nome; cteEletronico.infCte.dest.fone = config.Empresa.Telefone; cteEletronico.infCte.dest.enderDest = new enderDest(); cteEletronico.infCte.dest.enderDest.xLgr = config.Empresa.Logradouro; cteEletronico.infCte.dest.enderDest.nro = config.Empresa.Numero; cteEletronico.infCte.dest.enderDest.xCpl = config.Empresa.Complemento; cteEletronico.infCte.dest.enderDest.xBairro = config.Empresa.Bairro; cteEletronico.infCte.dest.enderDest.cMun = config.Empresa.CodigoIbgeMunicipio; cteEletronico.infCte.dest.enderDest.xMun = config.Empresa.NomeMunicipio; cteEletronico.infCte.dest.enderDest.CEP = long.Parse(config.Empresa.Cep); cteEletronico.infCte.dest.enderDest.UF = config.Empresa.SiglaUf; #endregion #region vPrest cteEletronico.infCte.vPrest = new vPrest(); cteEletronico.infCte.vPrest.vTPrest = 100m; cteEletronico.infCte.vPrest.vRec = 100m; #endregion #region imp cteEletronico.infCte.imp = new imp(); cteEletronico.infCte.imp.ICMS = new ICMS(); var icmsSimplesNacional = new ICMSSN(); cteEletronico.infCte.imp.ICMS.TipoICMS = icmsSimplesNacional; if (config.ConfigWebService.Versao == versao.ve300) { icmsSimplesNacional.CST = CST.ICMS90; } #endregion #region infCTeNorm cteEletronico.infCte.infCTeNorm = new infCTeNorm(); cteEletronico.infCte.infCTeNorm.infCarga = new infCarga(); cteEletronico.infCte.infCTeNorm.infCarga.vCarga = 1000m; cteEletronico.infCte.infCTeNorm.infCarga.proPred = "Linguiça com piqui"; cteEletronico.infCte.infCTeNorm.infCarga.infQ = new List <infQ>(); cteEletronico.infCte.infCTeNorm.infCarga.infQ.Add(new infQ { cUnid = cUnid.KG, qCarga = 10000, tpMed = "quilos gramas" }); cteEletronico.infCte.infCTeNorm.infDoc = new infDoc(); cteEletronico.infCte.infCTeNorm.infDoc.infNFe = new List <infNFe>(); cteEletronico.infCte.infCTeNorm.infDoc.infNFe.Add(new infNFe { chave = "52161021025760000123550010000087341557247948" }); if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.infCTeNorm.seg = new List <seg>(); cteEletronico.infCte.infCTeNorm.seg.Add(new seg { respSeg = respSeg.Destinatario }); } cteEletronico.infCte.infCTeNorm.infModal = new infModal(); if (config.ConfigWebService.Versao == versao.ve200) { cteEletronico.infCte.infCTeNorm.infModal.versaoModal = versaoModal.veM200; } if (config.ConfigWebService.Versao == versao.ve300) { cteEletronico.infCte.infCTeNorm.infModal.versaoModal = versaoModal.veM300; } var rodoviario = new rodo(); rodoviario.RNTRC = config.Empresa.RNTRC; if (config.ConfigWebService.Versao == versao.ve200) { rodoviario.dPrev = DateTime.Now; rodoviario.lota = lota.Nao; } cteEletronico.infCte.infCTeNorm.infModal.ContainerModal = rodoviario; #endregion var numeroLote = InputBoxTuche("Número Lote"); var servicoRecepcao = new ServicoCTeRecepcao(); // Evento executado antes do envio do CT-e para o WebService // servicoRecepcao.AntesDeEnviar += AntesEnviarLoteCte; var retornoEnvio = servicoRecepcao.CTeRecepcao(int.Parse(numeroLote), new List <CteEletronico> { cteEletronico }); OnSucessoSync(new RetornoEEnvio(retornoEnvio)); config.ConfigWebService.Numeracao++; new ConfiguracaoDao().SalvarConfiguracao(config); }
/// <summary> /// Coverte uma string XML no formato CTe para um objeto CTe /// </summary> /// <param name="cte"></param> /// <param name="xmlString"></param> /// <returns>Retorna um objeto do tipo CTe</returns> public static CteEletronica CarregarDeXmlString(this CteEletronica cte, string xmlString) { var s = FuncoesXml.ObterNodeDeStringXml(typeof(CteEletronica).Name, xmlString); return(FuncoesXml.XmlStringParaClasse <CteEletronica>(s)); }
/// <summary> /// Converte o objeto CTe para uma string no formato XML /// </summary> /// <param name="cte"></param> /// <returns>Retorna uma string no formato XML com os dados da CTe</returns> public static string ObterXmlString(this CteEletronica cte) { return(FuncoesXml.ClasseParaXmlString(cte)); }
/// <summary> /// Carrega um arquivo XML para um objeto da classe CTe /// </summary> /// <param name="cte"></param> /// <param name="arquivoXml">arquivo XML</param> /// <returns>Retorna uma NFe carregada com os dados do XML</returns> public static CteEletronica CarregarDeArquivoXml(this CteEletronica cte, string arquivoXml) { var s = FuncoesXml.ObterNodeDeArquivoXml(typeof(CteEletronica).Name, arquivoXml); return(FuncoesXml.XmlStringParaClasse <CteEletronica>(s)); }
public async Task <retEventoCTe> ExecutarAsync(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) { return(await ExecutarAsync(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico)); }
public retEventoCTe Executar(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) { return(Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico)); }