示例#1
0
        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);
            }
        }
示例#2
0
 public EnviarCTeResposta(RecepcaoCTeResposta recepcaoResposta, RetRecepcaoResposta retRecepcaoResposta)
 {
     RecepcaoResposta    = recepcaoResposta;
     RetRecepcaoResposta = retRecepcaoResposta;
     CTeAutorizados      = new CTeProc[0];
 }