public RecepcaoCTeResposta RecepcaoLote(CTe[] ctes, string loteId) { Guard.Against <ArgumentNullException>(ctes == null, nameof(ctes)); Guard.Against <ArgumentNullException>(loteId.IsEmpty(), "Número do lote vazio."); Guard.Against <ArgumentException>(!loteId.IsNumeric(), "Número do lote incorreto."); Guard.Against <ArgumentException>(ctes.Length < 1, "Precisa de pelo menos 1 conhecimento por lote."); Guard.Against <ArgumentException>(ctes.Length > 50, "So pode enviar 50 conhecimentos por lote."); lock (serviceLock) { var request = new StringBuilder(); request.Append($"<enviCTe xmlns=\"http://www.portalfiscal.inf.br/cte\" versao=\"{Configuracoes.Geral.VersaoDFe.GetDescription()}\">"); request.Append($"<idLote>{loteId}</idLote>"); var saveOptions = DFeSaveOptions.DisableFormatting | DFeSaveOptions.OmitDeclaration; if (Configuracoes.Geral.RetirarAcentos) { saveOptions |= DFeSaveOptions.RemoveAccents; } if (Configuracoes.Geral.RetirarEspacos) { saveOptions |= DFeSaveOptions.RemoveSpaces; } foreach (var cte in ctes) { var cteXml = cte.Xml.IsEmpty() ? cte.GetXml(saveOptions) : cte.Xml; GravarCTe(cteXml, cte.GetXmlName(), cte.InfCTe.Ide.DhEmi.DateTime, cte.InfCTe.Emit.CNPJ, cte.InfCTe.Ide.Mod); request.Append(cteXml); } request.Append("</enviCTe>"); var dadosMsg = request.ToString(); Guard.Against <ACBrDFeException>(dadosMsg.Length > (500 * 1024), $"Tamanho do XML de Dados superior a 500 Kbytes. Tamanho atual: {(dadosMsg.Length / 1024M).Trunc()} Kbytes"); ValidateMessage(dadosMsg); var doc = new XmlDocument(); doc.LoadXml(dadosMsg); var inValue = new RecepcaoRequest(DefineHeader(), doc); var retVal = Channel.RecepcaoLote(inValue); var retorno = new RecepcaoCTeResposta(dadosMsg, retVal.Result.OuterXml, EnvelopeSoap, RetornoWS); return(retorno); } }
public EnviarCTeResposta(RecepcaoCTeResposta recepcaoResposta, RetRecepcaoResposta retRecepcaoResposta) { RecepcaoResposta = recepcaoResposta; RetRecepcaoResposta = retRecepcaoResposta; CTeAutorizados = new CTeProc[0]; }