/// <summary> /// Retorna o caminho onde será salvo os CTes. /// </summary> /// <param name="data"></param> /// <param name="cnpj"></param> /// <param name="modelo"></param> /// <returns></returns> public string GetPathCTe(DateTime?data = null, string cnpj = "", ModeloCTe modelo = ModeloCTe.CTe) { string modeloDscr; switch (modelo) { case ModeloCTe.CTeOS: modeloDscr = "CTeOS"; break; default: modeloDscr = "CTe"; break; } return(GetPath(PathCTe, modeloDscr, cnpj, data, modeloDscr)); }
/// <summary> /// Salvar o arquivo xml do CTe no disco de acordo com as propriedades. /// </summary> /// <param name="conteudoArquivo"></param> /// <param name="nomeArquivo"></param> /// <param name="data"></param> /// <param name="cnpj"></param> /// <param name="modelo"></param> /// <exception cref="ArgumentOutOfRangeException"></exception> protected void GravarCTe(string conteudoArquivo, string nomeArquivo, DateTime data, string cnpj, ModeloCTe modelo) { if (!Configuracoes.Arquivos.Salvar) { return; } conteudoArquivo = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + conteudoArquivo.RemoverDeclaracaoXml(); nomeArquivo = Path.Combine(Configuracoes.Arquivos.GetPathCTe(data, cnpj, modelo), nomeArquivo); File.WriteAllText(nomeArquivo, conteudoArquivo, Encoding.UTF8); }
public InutilizaoResposta Inutilizacao(string cnpj, string aJustificativa, int ano, ModeloCTe modelo, int serie, int numeroInicial, int numeroFinal) { Guard.Against <ArgumentNullException>(cnpj.IsEmpty(), "Informar o número do CNPJ"); Guard.Against <ArgumentException>(!cnpj.IsCNPJ(), "CNPJ inválido."); Guard.Against <ArgumentNullException>(aJustificativa.IsEmpty(), "Informar uma Justificativa para Inutilização de numeração do Conhecimento Eletrônico."); Guard.Against <ArgumentException>(aJustificativa.Length < 15, "A Justificativa para Inutilização de numeração do Conhecimento Eletrônico deve ter no minimo 15 caracteres."); lock (serviceLock) { var idInutilizacao = $"ID{Configuracoes.WebServices.UF.GetDFeValue()}{cnpj.OnlyNumbers()}{modelo.GetDFeValue()}" + $"{serie.ZeroFill(3)}{numeroInicial.ZeroFill(9)}{numeroFinal.ZeroFill(9)}"; var request = new StringBuilder(); request.Append($"<inutCTe xmlns=\"http://www.portalfiscal.inf.br/cte\" versao=\"{Configuracoes.Geral.VersaoDFe.GetDescription()}\">"); request.Append($"<infInut Id=\"{idInutilizacao}\">"); request.Append($"<tpAmb>{Configuracoes.WebServices.Ambiente.GetDFeValue()}</tpAmb>"); request.Append("<xServ>INUTILIZAR</xServ>"); request.Append($"<cUF>{Configuracoes.WebServices.UF.GetDFeValue()}</cUF>"); request.Append($"<ano>{ano}</ano>"); request.Append($"<CNPJ>{cnpj}</CNPJ>"); request.Append($"<mod>{modelo.GetDFeValue()}</mod>"); request.Append($"<serie>{serie}</serie>"); request.Append($"<nCTIni>{numeroInicial}</nCTIni>"); request.Append($"<nCTFin>{numeroFinal}</nCTFin>"); request.Append($"<xJust>{aJustificativa}</xJust>"); request.Append("</infInut>"); request.Append("</inutCTe>"); var dadosMsg = request.ToString(); dadosMsg = XmlSigning.AssinarXml(dadosMsg, "inutCTe", "infInut", ClientCredentials.ClientCertificate.Certificate); ValidateMessage(dadosMsg); GravarInutilizacao(dadosMsg, $"{idInutilizacao.OnlyNumbers()}-inut-cte-env.xml", DateTime.Now, cnpj); var xml = new XmlDocument(); xml.LoadXml(dadosMsg); var inValue = new InutilizacaoRequest(DefineHeader(), xml); var retVal = Channel.CTeInutilizacao(inValue); var retorno = new InutilizaoResposta(dadosMsg, retVal.Result.OuterXml, EnvelopeSoap, RetornoWS); GravarInutilizacao(retVal.Result.OuterXml, $"{idInutilizacao.OnlyNumbers()}-inut-cte-ret.xml", DateTime.Now, cnpj); return(retorno); } }