public static string StatusServico(TRegistro_CfgMDFe rCfgMDFe) { StringBuilder xml = new StringBuilder(); xml.Append("<consStatServMDFe versao=\"" + rCfgMDFe.Cd_versaomdfe.Trim() + "\" xmlns=\"http://www.portalfiscal.inf.br/mdfe\">"); xml.Append("<tpAmb>"); xml.Append(rCfgMDFe.Tp_ambiente.Trim()); xml.Append("</tpAmb>"); xml.Append("<xServ>"); xml.Append("STATUS"); xml.Append("</xServ>"); xml.Append("</consStatServMDFe>"); try { //Validar schema xml Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(), rCfgMDFe.Path_schemas.Trim().SeparadorDiretorio() + "consStatServMDFe_v" + rCfgMDFe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { return(Utils.ValidaSchema.ValidaXML2.Retorno); } //Conectar Web Service XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.ToString()); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMDFe); //Tratar retorno return(retorno["cStat"].InnerText); } catch (Exception ex) { return(ex.Message.Trim()); } }
private static XmlNode ConectarWebService(XmlNode mdfeDadosMsg, TRegistro_CfgMDFe rCfgMDFe) { switch (rCfgMDFe.rEmp.rEndereco.Cd_uf.Trim()) { case ("41"): { if (rCfgMDFe.Tp_ambiente.Trim().Equals("1")) //Produção { br.gov.rs.svrs.mdfe.Status.MDFeStatusServico mdfe = new MDFe.br.gov.rs.svrs.mdfe.Status.MDFeStatusServico(); mdfe.mdfeCabecMsgValue = new MDFe.br.gov.rs.svrs.mdfe.Status.mdfeCabecMsg() { cUF = rCfgMDFe.rEmp.rEndereco.Cd_uf, versaoDados = rCfgMDFe.Cd_versaomdfe }; mdfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; mdfe.ClientCertificates.Add(Utils.Assinatura.TAssinatura2.BuscaNroSerie(rCfgMDFe.Nr_certificado)); return(mdfe.mdfeStatusServicoMDF(mdfeDadosMsg)); } else //Homologação { br.gov.rs.svrs.mdfe.homolog.Status.MDFeStatusServico mdfe = new MDFe.br.gov.rs.svrs.mdfe.homolog.Status.MDFeStatusServico(); mdfe.mdfeCabecMsgValue = new MDFe.br.gov.rs.svrs.mdfe.homolog.Status.mdfeCabecMsg() { cUF = rCfgMDFe.rEmp.rEndereco.Cd_uf, versaoDados = rCfgMDFe.Cd_versaomdfe }; mdfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; mdfe.ClientCertificates.Add(Utils.Assinatura.TAssinatura2.BuscaNroSerie(rCfgMDFe.Nr_certificado)); return(mdfe.mdfeStatusServicoMDF(mdfeDadosMsg)); } } default: return(null); } }
public static string ConsultaChave(string Chave_acesso, string Tp_ambiente, TRegistro_CfgMDFe rCfgMdfe) { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.Append("<consSitMDFe versao=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\" xmlns=\"http://www.portalfiscal.inf.br/mdfe\">"); xml.Append("<tpAmb>"); xml.Append(Tp_ambiente.Trim()); xml.Append("</tpAmb>"); xml.Append("<xServ>"); xml.Append("CONSULTAR"); xml.Append("</xServ>"); xml.Append("<chMDFe>"); xml.Append(Chave_acesso.Trim()); xml.Append("</chMDFe>"); xml.Append("</consSitMDFe>"); try { //Validar schema xml Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(), rCfgMdfe.Path_schemas.Trim().SeparadorDiretorio() + "consSitMDFe_v" + rCfgMdfe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { return(Utils.ValidaSchema.ValidaXML2.Retorno); } //Conectar Web Service XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.ToString()); //rCfgNfe.St_nfecontingencia = St_contingencia; XmlNode retorno = ConectarWebService(doc.DocumentElement, Tp_ambiente, rCfgMdfe); //Tratar retorno if (retorno != null) { if (retorno["cStat"].InnerText.Trim().Equals("100") || retorno["cStat"].InnerText.Trim().Equals("132")) { return(retorno["protMDFe"]["infProt"]["cStat"].InnerText + "|" + retorno["protMDFe"]["infProt"]["xMotivo"].InnerText + "|" + retorno["protMDFe"]["infProt"]["dhRecbto"].InnerText + "|" + retorno["protMDFe"]["infProt"]["nProt"].InnerText + "|" + retorno["protMDFe"]["infProt"]["digVal"].InnerText + "|" + retorno["protMDFe"]["infProt"]["verAplic"].InnerText); } else { return(string.Empty); } } else { return(string.Empty); } } catch (Exception ex) { return(ex.Message.Trim()); } }
public static void GerarArquivoXmlPeriodo(string vPath_xml, TList_MDFe lMDFe, TRegistro_CfgMDFe rCfg) { try { string retorno = string.Empty; //Path XML if (vPath_xml.Trim().Substring(vPath_xml.Trim().Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString()) { vPath_xml += System.IO.Path.DirectorySeparatorChar.ToString(); } lMDFe.ForEach(p => { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.Append("<mdfeProc xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfg.Cd_versaomdfe.Trim() + "\">"); xml.Append(p.Xml_mdfe.Replace(" xmlns=\"http://www.portalfiscal.inf.br/mdfe\"", string.Empty)); xml.Append(p.Xml_lote.Replace(" xmlns=\"http://www.portalfiscal.inf.br/mdfe\"", string.Empty)); xml.Append("</mdfeProc>"); //Salvar arquivo no Path indicado using (System.IO.StreamWriter sw = new System.IO.StreamWriter(vPath_xml.Trim() + p.Chaveacesso.Trim() + "-procMDFe.xml")) { sw.Write(xml.ToString()); sw.Flush(); sw.Close(); } //Buscar Eventos MDFe CamadaNegocio.Frota.TCN_MDFe_Evento.Buscar(p.Cd_empresa, p.Id_mdfestr, string.Empty, "T", null).ForEach(v => { xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.Append("<procEventoMDFe xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfg.Cd_versaomdfe.Trim() + "\">"); xml.Append(v.Xml_evento.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty).Replace(" xmlns=\"http://www.portalfiscal.inf.br/mdfe\"", string.Empty)); xml.Append(v.Xml_retevent.Replace(" xmlns=\"http://www.portalfiscal.inf.br/mdfe\"", string.Empty)); xml.Append("</procEventoMDFe>"); //Salvar arquivo no Path indicado using (System.IO.StreamWriter sw = new System.IO.StreamWriter(vPath_xml.Trim() + v.Cd_eventostr.Trim() + "-" + p.Chaveacesso.Trim() + "-procEventoMDFe.xml")) { sw.Write(xml.ToString()); sw.Flush(); sw.Close(); } }); }); } catch (Exception ex) { throw new Exception(ex.Message.Trim()); } }
public static string MontarChaveAcessoMDFe(TRegistro_MDFe val, TRegistro_CfgMDFe rCfgMDFe) { return(rCfgMDFe.rEmp.rEndereco.Cd_uf.Trim() + //Codigo UF Empresa Convert.ToDateTime(val.Dt_emissao.Value.ToString("dd/MM/yy")).Year.ToString().FormatStringEsquerda(2, '0') + //Ano Emissao Convert.ToDateTime(val.Dt_emissao.Value.ToString("dd/MM/yy")).Month.ToString().FormatStringEsquerda(2, '0') + //Mes Emissao rCfgMDFe.rEmp.rClifor.Nr_cgc.SoNumero() + //CNPJ do Emitente val.Cd_modelo.Trim() + //Modelo val.Nr_serie.Trim().FormatStringEsquerda(3, '0') + //Serie val.Nr_mdfe.Value.FormatStringEsquerda(9, '0') + //Nº MDFe "1" + //Tipo Emissao val.Id_mdfe.Value.FormatStringEsquerda(8, '0')); //Codigo Interno MDFe }
public static string Excluir(TRegistro_CfgMDFe val, BancoDados.TObjetoBanco banco) { bool st_transacao = false; TCD_CfgMDFe qtb_cfg = new TCD_CfgMDFe(); try { if (banco == null) { st_transacao = qtb_cfg.CriarBanco_Dados(true); } else { qtb_cfg.Banco_Dados = banco; } qtb_cfg.Excluir(val); if (st_transacao) { qtb_cfg.Banco_Dados.Commit_Tran(); } return("OK"); } catch (Exception ex) { if (st_transacao) { qtb_cfg.Banco_Dados.RollBack_Tran(); } throw new Exception("Erro excluir config.: " + ex.Message.Trim()); } finally { if (st_transacao) { qtb_cfg.deletarBanco_Dados(); } } }
public static string EnviarEvento(CamadaDados.Frota.TRegistro_MDFe_Evento rEvento, TRegistro_CfgMDFe rCfgMdfe) { decimal seqEvento = 1; if (rEvento.Tp_evento.Trim().ToUpper().Equals("IC")) { object obj = new CamadaDados.Frota.TCD_MDFe_Evento().BuscarEscalar( new TpBusca[] { new TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + rEvento.Cd_empresa.Trim() + "'" }, new TpBusca() { vNM_Campo = "a.id_mdfe", vOperador = "=", vVL_Busca = rEvento.Id_mdfe.Value.ToString() }, new TpBusca() { vNM_Campo = "isnull(a.st_registro, 'A')", vOperador = "=", vVL_Busca = "'T'" }, new TpBusca() { vNM_Campo = "b.tp_evento", vOperador = "=", vVL_Busca = "'IC'" } }, "count(*)"); if (obj != null) { seqEvento += decimal.Parse(obj.ToString()); } } StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); xml.Append("<eventoMDFe xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<infEvento Id=\"ID" + rEvento.Cd_eventostr + rEvento.Chaveacesso.Trim() + seqEvento.ToString().FormatStringEsquerda(2, '0') + "\">"); xml.Append("<cOrgao>"); xml.Append(rCfgMdfe.rEmp.rEndereco.Cd_uf.Trim()); xml.Append("</cOrgao>"); xml.Append("<tpAmb>"); xml.Append(rCfgMdfe.Tp_ambiente.Trim()); xml.Append("</tpAmb>"); xml.Append("<CNPJ>"); xml.Append(rCfgMdfe.rEmp.rClifor.Nr_cgc.SoNumero()); xml.Append("</CNPJ>"); xml.Append("<chMDFe>"); xml.Append(rEvento.Chaveacesso.Trim()); xml.Append("</chMDFe>"); xml.Append("<dhEvento>"); xml.Append(rEvento.Dt_evento.Value.ToString("yyyy-MM-ddTHH:mm:sszzz")); xml.Append("</dhEvento>"); xml.Append("<tpEvento>"); xml.Append(rEvento.Cd_eventostr); xml.Append("</tpEvento>"); xml.Append("<nSeqEvento>"); xml.Append(seqEvento.ToString()); xml.Append("</nSeqEvento>"); if (rEvento.Tp_evento.Trim().ToUpper().Equals("CA"))//Cancelamento { xml.Append("<detEvento versaoEvento=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<evCancMDFe>"); xml.Append("<descEvento>"); xml.Append(rEvento.Ds_evento.Trim()); xml.Append("</descEvento>"); xml.Append("<nProt>"); xml.Append(rEvento.Nr_protocoloMDFe.FormatStringEsquerda(15, '0')); xml.Append("</nProt>"); xml.Append("<xJust>"); xml.Append(rEvento.Justificativa.RemoverCaracteres().SubstCaracteresEsp().Trim()); xml.Append("</xJust>"); xml.Append("</evCancMDFe>"); xml.Append("</detEvento>"); } else if (rEvento.Tp_evento.Trim().ToUpper().Equals("EC"))//Encerramento { xml.Append("<detEvento versaoEvento=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<evEncMDFe>"); xml.Append("<descEvento>"); xml.Append(rEvento.Ds_evento.Trim()); xml.Append("</descEvento>"); xml.Append("<nProt>"); xml.Append(rEvento.Nr_protocoloMDFe.FormatStringEsquerda(15, '0')); xml.Append("</nProt>"); xml.Append("<dtEnc>"); xml.Append(rEvento.Dt_evento.Value.ToString("yyyy-MM-dd")); xml.Append("</dtEnc>"); xml.Append("<cUF>"); xml.Append(rEvento.Cd_ufEnc.Trim()); xml.Append("</cUF>"); xml.Append("<cMun>"); xml.Append(rEvento.Cd_cidadeEnc.Trim()); xml.Append("</cMun>"); xml.Append("</evEncMDFe>"); xml.Append("</detEvento>"); } else if (rEvento.Tp_evento.Trim().ToUpper().Equals("IC"))//Inclusão Condutor { xml.Append("<detEvento versaoEvento=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<evIncCondutorMDFe>"); xml.Append("<descEvento>"); xml.Append(rEvento.Ds_evento.Trim()); xml.Append("</descEvento>"); xml.Append("<condutor>"); xml.Append("<xNome>"); xml.Append(rEvento.Nm_motorista.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xNome>"); xml.Append("<CPF>"); xml.Append(rEvento.Cpf_motorista.SoNumero()); xml.Append("</CPF>"); xml.Append("</condutor>"); xml.Append("</evIncCondutorMDFe>"); xml.Append("</detEvento>"); } xml.Append("</infEvento>"); xml.Append("</eventoMDFe>"); //Assinar documento XML string xmlassinado = new Utils.Assinatura.TAssinatura2(rCfgMdfe.Nr_certificado, Utils.Assinatura.TAssinatura2.TTpArq.tpEventoCTe, xml.ToString()).Assinar(); //Validar Schema XML Utils.ValidaSchema.ValidaXML2.validaXML(xmlassinado, rCfgMdfe.Path_schemas.SeparadorDiretorio() + "eventoMDFe_v" + rCfgMdfe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim()); } //Enviar arquivo para Receita XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlassinado); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMdfe); //Tratar retorno if (retorno != null) { if (retorno["infEvento"]["cStat"].InnerText.Trim().Equals("135")) { rEvento.St_registro = "T"; try { rEvento.Nr_protocolo = retorno["infEvento"]["nProt"].InnerText; } catch { } rEvento.Xml_evento = xmlassinado; rEvento.Xml_retevent = retorno.OuterXml; CamadaNegocio.Frota.TCN_MDFe_Evento.Gravar(rEvento, null); return(string.Empty); } else { return(retorno["infEvento"]["xMotivo"].InnerText); } } else { throw new Exception("Ocorreu um erro ao enviar EVENTO para receita."); } }
public static string EnviarEncerramento(CamadaDados.Frota.TRegistro_MDFe_Evento rEvento, TRegistro_CfgMDFe rCfgMdfe) { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); xml.Append("<eventoMDFe xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<infEvento Id=\"ID" + rEvento.Cd_eventostr + rEvento.Chaveacesso.Trim() + "01\">"); xml.Append("<cOrgao>"); xml.Append(rCfgMdfe.rEmp.rEndereco.Cd_uf.Trim()); xml.Append("</cOrgao>"); xml.Append("<tpAmb>"); xml.Append(rCfgMdfe.Tp_ambiente.Trim()); xml.Append("</tpAmb>"); xml.Append("<CNPJ>"); xml.Append(rCfgMdfe.rEmp.rClifor.Nr_cgc.SoNumero()); xml.Append("</CNPJ>"); xml.Append("<chMDFe>"); xml.Append(rEvento.Chaveacesso.Trim()); xml.Append("</chMDFe>"); xml.Append("<dhEvento>"); xml.Append(rEvento.Dt_evento.Value.ToString("yyyy-MM-ddTHH:mm:sszzz")); xml.Append("</dhEvento>"); xml.Append("<tpEvento>"); xml.Append(rEvento.Cd_eventostr); xml.Append("</tpEvento>"); xml.Append("<nSeqEvento>"); xml.Append("1"); xml.Append("</nSeqEvento>"); xml.Append("<detEvento versaoEvento=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<evEncMDFe>"); xml.Append("<descEvento>"); xml.Append(rEvento.Ds_evento.Trim()); xml.Append("</descEvento>"); xml.Append("<nProt>"); xml.Append(rEvento.Nr_protocoloMDFe.FormatStringEsquerda(15, '0')); xml.Append("</nProt>"); xml.Append("<dtEnc>"); xml.Append(rEvento.Dt_evento.Value.ToString("yyyy-MM-dd")); xml.Append("</dtEnc>"); xml.Append("<cUF>"); xml.Append(rEvento.Cd_ufEnc.Trim()); xml.Append("</cUF>"); xml.Append("<cMun>"); xml.Append(rEvento.Cd_cidadeEnc.Trim()); xml.Append("</cMun>"); xml.Append("</evEncMDFe>"); xml.Append("</detEvento>"); xml.Append("</infEvento>"); xml.Append("</eventoMDFe>"); //Assinar documento XML string xmlassinado = new Utils.Assinatura.TAssinatura2(rCfgMdfe.Nr_certificado, Utils.Assinatura.TAssinatura2.TTpArq.tpEventoCTe, xml.ToString()).Assinar(); //Validar Schema XML Utils.ValidaSchema.ValidaXML2.validaXML(xmlassinado, rCfgMdfe.Path_schemas.SeparadorDiretorio() + "eventoMDFe_v" + rCfgMdfe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim()); } //Enviar arquivo para Receita XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlassinado); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMdfe); //Tratar retorno if (retorno != null) { if (retorno["infEvento"]["cStat"].InnerText.Trim().Equals("135")) { rEvento.St_registro = "T"; try { rEvento.Nr_protocolo = retorno["infEvento"]["nProt"].InnerText; } catch { } if (rEvento.Id_mdfe.HasValue)//Somente MDF-e existente no sistema { rEvento.Xml_evento = xmlassinado; rEvento.Xml_retevent = retorno.OuterXml; CamadaNegocio.Frota.TCN_MDFe_Evento.Gravar(rEvento, null); } return(string.Empty); } else { return(retorno["infEvento"]["xMotivo"].InnerText); } } else { throw new Exception("Ocorreu um erro ao enviar EVENTO para receita."); } }
public static List <CamadaDados.Frota.TRegistro_MDFe> ConsMDFeNaoEnc(TRegistro_CfgMDFe rCfgMdfe) { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); xml.Append("<consMDFeNaoEnc xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfgMdfe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<tpAmb>"); xml.Append(rCfgMdfe.Tp_ambiente.Trim()); xml.Append("</tpAmb>"); xml.Append("<xServ>CONSULTAR NÃO ENCERRADOS</xServ>"); xml.Append("<CNPJ>"); xml.Append(rCfgMdfe.rEmp.rClifor.Nr_cgc.SoNumero()); xml.Append("</CNPJ>"); xml.Append("</consMDFeNaoEnc>"); //Validar Schema XML Obs. Esta dando erro na validacao do schemas por isso foi desativado //Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(), // rCfgMdfe.Path_schemas.SeparadorDiretorio() + "consMDFeNaoEnc_v" + rCfgMdfe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); //if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) // throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim()); //Enviar arquivo para Receita XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.ToString()); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMdfe); //Tratar retorno if (retorno != null) { List <CamadaDados.Frota.TRegistro_MDFe> lRet = new List <CamadaDados.Frota.TRegistro_MDFe>(); foreach (XmlNode no in retorno.ChildNodes) { if (no.Name.Trim().Equals("infMDFe")) { //Verificar se chave existe no sitema CamadaDados.Frota.TList_MDFe lMdfe = CamadaNegocio.Frota.TCN_MDFe.Buscar(rCfgMdfe.Cd_empresa, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, no["chMDFe"].InnerText, string.Empty, string.Empty, null); if (lMdfe.Count > 0) { lRet.Add(lMdfe[0]); } else { CamadaDados.Frota.TRegistro_MDFe rMDFe = new CamadaDados.Frota.TRegistro_MDFe(); rMDFe.Chaveacesso = no["chMDFe"].InnerText; rMDFe.Nr_protocolo = no["nProt"].InnerText; lRet.Add(rMDFe); } } } return(lRet); } else { throw new Exception("Ocorreu um erro ao enviar CONSULTA NÃO ENCERRADOS para receita."); } }
public static void GerarArquivoXml(List <TRegistro_MDFe> lMDFe, TRegistro_CfgMDFe rCfgMDFe) { lMDFe.ForEach(p => { //Buscar Veiculo p.lVeic = CamadaNegocio.Frota.TCN_MDFe_Veiculo.Buscar(p.Cd_empresa, p.Id_mdfestr, null); //Buscar Motorista p.lMot = CamadaNegocio.Frota.TCN_MDFe_Motorista.Buscar(p.Cd_empresa, p.Id_mdfestr, null); //Mun. Carga p.lMunCar = CamadaNegocio.Frota.TCN_MDFe_MunCarrega.Buscar(p.Cd_empresa, p.Id_mdfestr, null); //UF Percurso p.lUfPerc = CamadaNegocio.Frota.TCN_MDFe_UfPercurso.Buscar(p.Cd_empresa, p.Id_mdfestr, null); //Documentos p.lDoc = CamadaNegocio.Frota.TCN_MDFe_Documentos.Buscar(p.Cd_empresa, p.Id_mdfestr, null); //Buscar Seguros p.lSeguro = CamadaNegocio.Frota.TCN_MDFe_Seguro.Buscar(p.Cd_empresa, p.Id_mdfestr, null); string xmlassinado = string.Empty; StringBuilder xml = new StringBuilder(); #region MDFe xml.Append("<MDFe xmlns=\"http://www.portalfiscal.inf.br/mdfe\">"); #region infMDFe xml.Append("<infMDFe Id=\"MDFe" + MontarChaveAcessoMDFe(p, rCfgMDFe) + CalcularDigitoChave(MontarChaveAcessoMDFe(p, rCfgMDFe)) + "\" versao=\"" + rCfgMDFe.Cd_versaomdfe.Trim() + "\">"); #region ide xml.Append("<ide>"); #region cUF xml.Append("<cUF>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Cd_uf.Trim()); xml.Append("</cUF>"); #endregion #region tpAmb xml.Append("<tpAmb>"); xml.Append(rCfgMDFe.Tp_ambiente.Trim()); xml.Append("</tpAmb>"); #endregion #region tpEmit xml.Append("<tpEmit>"); xml.Append(p.Tp_emitente.Trim()); xml.Append("</tpEmit>"); #endregion #region mod xml.Append("<mod>"); xml.Append(p.Cd_modelo.Trim()); xml.Append("</mod>"); #endregion #region serie xml.Append("<serie>"); xml.Append(p.Nr_serie.Trim()); xml.Append("</serie>"); #endregion #region nMDF xml.Append("<nMDF>"); xml.Append(p.Nr_mdfe.Value.ToString()); xml.Append("</nMDF>"); #endregion #region cMDF xml.Append("<cMDF>"); xml.Append(p.Id_mdfe.Value.ToString().FormatStringEsquerda(8, '0')); xml.Append("</cMDF>"); #endregion #region cDV xml.Append("<cDV>"); xml.Append(CalcularDigitoChave(MontarChaveAcessoMDFe(p, rCfgMDFe))); xml.Append("</cDV>"); #endregion #region modal xml.Append("<modal>"); xml.Append(p.Tp_modalidade.Trim()); xml.Append("</modal>"); #endregion #region dhEmi xml.Append("<dhEmi>"); xml.Append(p.Dt_emissao.Value.ToString("yyyy-MM-ddTHH:mm:sszzz")); xml.Append("</dhEmi>"); #endregion #region tpEmis xml.Append("<tpEmis>"); xml.Append("1"); xml.Append("</tpEmis>"); #endregion #region procEmi xml.Append("<procEmi>"); xml.Append("0"); xml.Append("</procEmi>"); #endregion #region verProc xml.Append("<verProc>"); xml.Append("1.00"); xml.Append("</verProc>"); #endregion #region UFIni xml.Append("<UFIni>"); xml.Append(p.Sg_ufcarrega.Trim()); xml.Append("</UFIni>"); #endregion #region UFFim xml.Append("<UFFim>"); xml.Append(p.Sg_ufdescarrega.Trim()); xml.Append("</UFFim>"); #endregion p.lMunCar.ForEach(v => { #region infMunCarrega xml.Append("<infMunCarrega>"); #region cMunCarrega xml.Append("<cMunCarrega>"); xml.Append(v.Cd_cidade.Trim()); xml.Append("</cMunCarrega>"); #endregion #region xMunCarrega xml.Append("<xMunCarrega>"); xml.Append(v.Ds_cidade.RemoverCaracteres().SubstCaracteresEsp().Trim()); xml.Append("</xMunCarrega>"); #endregion xml.Append("</infMunCarrega>"); #endregion }); #region infPercurso p.lUfPerc.ForEach(v => { xml.Append("<infPercurso>"); #region UFPer xml.Append("<UFPer>"); xml.Append(v.Sg_uf.Trim()); xml.Append("</UFPer>"); #endregion xml.Append("</infPercurso>"); }); #endregion #region dhIniViagem if (p.Dt_iniviagem.HasValue) { xml.Append("<dhIniViagem>"); xml.Append(p.Dt_iniviagem.Value.ToString("yyyy-MM-ddTHH:mm:sszzz")); xml.Append("</dhIniViagem>"); } #endregion xml.Append("</ide>"); #endregion #region emit xml.Append("<emit>"); #region CNPJ xml.Append("<CNPJ>"); xml.Append(rCfgMDFe.rEmp.rClifor.Nr_cgc.SoNumero()); xml.Append("</CNPJ>"); #endregion #region IE xml.Append("<IE>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Insc_estadual.SoNumero()); xml.Append("</IE>"); #endregion #region xNome xml.Append("<xNome>"); xml.Append(rCfgMDFe.rEmp.rClifor.Nm_clifor.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xNome>"); #endregion #region xFant xml.Append("<xFant>"); xml.Append(rCfgMDFe.rEmp.rClifor.Nm_fantasia.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xFant>"); #endregion #region enderEmit xml.Append("<enderEmit>"); #region xLgr xml.Append("<xLgr>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Ds_endereco.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xLgr>"); #endregion #region nro xml.Append("<nro>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Numero.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</nro>"); #endregion #region xCpl if (!string.IsNullOrEmpty(rCfgMDFe.rEmp.rEndereco.Ds_complemento)) { xml.Append("<xCpl>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Ds_complemento.RemoverCaracteres().SubstCaracteresEsp().Trim()); xml.Append("</xCpl>"); } #endregion #region xBairro xml.Append("<xBairro>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Bairro.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xBairro>"); #endregion #region cMun xml.Append("<cMun>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Cd_cidade.Trim()); xml.Append("</cMun>"); #endregion #region xMun xml.Append("<xMun>"); xml.Append(rCfgMDFe.rEmp.rEndereco.DS_Cidade.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xMun>"); #endregion #region CEP if (!string.IsNullOrEmpty(rCfgMDFe.rEmp.rEndereco.Cep.SoNumero())) { xml.Append("<CEP>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Cep.SoNumero()); xml.Append("</CEP>"); } #endregion #region UF xml.Append("<UF>"); xml.Append(rCfgMDFe.rEmp.rEndereco.UF.Trim()); xml.Append("</UF>"); #endregion #region fone if (!string.IsNullOrEmpty(rCfgMDFe.rEmp.rEndereco.Fone.SoNumero())) { xml.Append("<fone>"); xml.Append(rCfgMDFe.rEmp.rEndereco.Fone.SoNumero()); xml.Append("</fone>"); } #endregion #region email if (!string.IsNullOrEmpty(rCfgMDFe.rEmp.rClifor.Email)) { xml.Append("<email>"); xml.Append(rCfgMDFe.rEmp.rClifor.Email.SubstCaracteresEsp().Trim()); xml.Append("</email>"); } #endregion xml.Append("</enderEmit>"); #endregion xml.Append("</emit>"); #endregion #region infModal xml.Append("<infModal versaoModal=\"" + rCfgMDFe.Cd_versaomodal.Trim() + "\">"); #region rodo xml.Append("<rodo>"); if (p.Tp_emitente.Trim().Equals("1")) { object obj_rntrc = new TCD_CfgFrota().BuscarEscalar( new TpBusca[] { new TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + p.Cd_empresa.Trim() + "'" } }, "a.rntrc"); if (obj_rntrc != null) { xml.Append("<infANTT>"); xml.Append("<RNTRC>"); xml.Append(obj_rntrc.ToString()); xml.Append("</RNTRC>"); p.lDoc.ForEach(x => { xml.Append("<infContratante>"); xml.Append("<CNPJ>"); xml.Append(x.Cnpj_contratante.SoNumero()); xml.Append("</CNPJ>"); xml.Append("</infContratante>"); }); xml.Append("</infANTT>"); } } #region veicTracao if (!p.lVeic.Exists(v => v.rVeic.Tp_veiculo.Trim().ToUpper().Equals("T"))) { throw new Exception("Obrigatório informar veiculo TRAÇÃO para emitir MDF-e RODOVIARIO."); } TRegistro_CadVeiculo rVeicT = p.lVeic.Find(v => v.rVeic.Tp_veiculo.Trim().ToUpper().Equals("T")).rVeic; xml.Append("<veicTracao>"); #region cInt xml.Append("<cInt>"); xml.Append(rVeicT.Id_veiculostr); xml.Append("</cInt>"); #endregion #region placa if (rVeicT.placa.Replace("-", string.Empty).Length != 7) { throw new Exception("Placa invalida: " + rVeicT.placa.Replace("-", string.Empty) + "\r\nPlaca deve possuir 7 caracteres."); } xml.Append("<placa>"); xml.Append(rVeicT.placa.Replace("-", string.Empty)); xml.Append("</placa>"); #endregion #region RENAVAM if (!string.IsNullOrEmpty(rVeicT.renavan)) { if (rVeicT.renavan.Length < 9 || rVeicT.renavan.Length > 11) { throw new Exception("Renavan invalido: " + rVeicT.renavan + "\r\nRenavan deve possuir entre nove e onze caracteres."); } xml.Append("<RENAVAM>"); xml.Append(rVeicT.renavan); xml.Append("</RENAVAM>"); } #endregion #region tara if (rVeicT.Ps_tara_kg.Equals(decimal.Zero)) { throw new Exception("Obrigatório informar peso tara do veiculo."); } xml.Append("<tara>"); xml.Append(rVeicT.Ps_tara_kg.ToString()); xml.Append("</tara>"); #endregion #region capKG if (rVeicT.Capacidade_kg > decimal.Zero) { xml.Append("<capKG>"); xml.Append(rVeicT.Capacidade_kg.ToString()); xml.Append("</capKG>"); } #endregion #region capM3 if (rVeicT.Capacidade_m3 > decimal.Zero) { xml.Append("<capM3>"); xml.Append(rVeicT.Capacidade_m3.ToString()); xml.Append("</capM3>"); } #endregion #region prop if (!string.IsNullOrEmpty(rVeicT.Cd_proprietario)) { xml.Append("<prop>"); #region CPF if (rVeicT.Cnpj_cpf_prop.SoNumero().Length.Equals(11)) { xml.Append("<CPF>"); xml.Append(rVeicT.Cnpj_cpf_prop.SoNumero()); xml.Append("</CPF>"); } #endregion #region CNPJ if (rVeicT.Cnpj_cpf_prop.SoNumero().Length.Equals(14)) { xml.Append("<CNPJ>"); xml.Append(rVeicT.Cnpj_cpf_prop.SoNumero()); xml.Append("</CNPJ>"); } #endregion #region RNTRC xml.Append("<RNTRC>"); xml.Append(rVeicT.Rntrc_prop.Trim()); xml.Append("</RNTRC>"); #endregion #region xNome xml.Append("<xNome>"); xml.Append(rVeicT.Nm_proprietario.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xNome>"); #endregion #region IE if (!string.IsNullOrEmpty(rVeicT.Insc_estadual_prop)) { xml.Append("<IE>"); xml.Append(rVeicT.Insc_estadual_prop.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</IE>"); } #endregion #region UF xml.Append("<UF>"); xml.Append(rVeicT.Uf_proprietario.Trim()); xml.Append("</UF>"); #endregion #region tpProp xml.Append("<tpProp>"); xml.Append(rVeicT.Tp_proprietario.Trim()); xml.Append("</tpProp>"); #endregion xml.Append("</prop>"); } #endregion #region condutor p.lMot.ForEach(v => { xml.Append("<condutor>"); #region xNome xml.Append("<xNome>"); xml.Append(v.Nm_motorista.RemoverCaracteres().SubstCaracteresEsp().Trim()); xml.Append("</xNome>"); #endregion #region CPF xml.Append("<CPF>"); xml.Append(v.Cpf_motorista.SoNumero()); xml.Append("</CPF>"); #endregion xml.Append("</condutor>"); }); #endregion #region tpRod xml.Append("<tpRod>"); xml.Append(rVeicT.Tp_rodado.Trim()); xml.Append("</tpRod>"); #endregion #region tpCar xml.Append("<tpCar>"); xml.Append(rVeicT.Tp_carroceria.Trim()); xml.Append("</tpCar>"); #endregion #region UF xml.Append("<UF>"); xml.Append(rVeicT.Uf_veiculo.Trim()); xml.Append("</UF>"); #endregion xml.Append("</veicTracao>"); #endregion #region veicReboque p.lVeic.FindAll(v => v.rVeic.Tp_veiculo.Trim().ToUpper() != "T").ForEach(v => { xml.Append("<veicReboque>"); #region cInt xml.Append("<cInt>"); xml.Append(v.Id_veiculostr); xml.Append("</cInt>"); #endregion #region placa if (v.Placa.Replace("-", string.Empty).Length != 7) { throw new Exception("Placa invalida: " + v.Placa.Replace("-", string.Empty) + "\r\nPlaca deve possuir 7 caracteres."); } xml.Append("<placa>"); xml.Append(v.Placa.Replace("-", string.Empty)); xml.Append("</placa>"); #endregion #region RENAVAM if (!string.IsNullOrEmpty(v.rVeic.renavan)) { if (v.rVeic.renavan.Length < 9 || v.rVeic.renavan.Length > 11) { throw new Exception("Renavan invalido: " + v.rVeic.renavan + "\r\nRenavan deve possuir entre nove e onze caracteres."); } xml.Append("<RENAVAM>"); xml.Append(v.rVeic.renavan); xml.Append("</RENAVAM>"); } #endregion #region tara if (v.rVeic.Ps_tara_kg.Equals(decimal.Zero)) { throw new Exception("Obrigatório informar peso tara do veiculo."); } xml.Append("<tara>"); xml.Append(v.rVeic.Ps_tara_kg.ToString()); xml.Append("</tara>"); #endregion #region capKG xml.Append("<capKG>"); xml.Append(v.rVeic.Capacidade_kg.ToString()); xml.Append("</capKG>"); #endregion #region capM3 if (v.rVeic.Capacidade_m3 > decimal.Zero) { xml.Append("<capM3>"); xml.Append(v.rVeic.Capacidade_m3.ToString()); xml.Append("</capM3>"); } #endregion #region prop if (!string.IsNullOrEmpty(v.rVeic.Cd_proprietario)) { xml.Append("<prop>"); #region CPF if (v.rVeic.Cnpj_cpf_prop.SoNumero().Length.Equals(11)) { xml.Append("<CPF>"); xml.Append(v.rVeic.Cnpj_cpf_prop.SoNumero()); xml.Append("</CPF>"); } #endregion #region CNPJ if (v.rVeic.Cnpj_cpf_prop.SoNumero().Length.Equals(14)) { xml.Append("<CNPJ>"); xml.Append(v.rVeic.Cnpj_cpf_prop.SoNumero()); xml.Append("</CNPJ>"); } #endregion #region RNTRC xml.Append("<RNTRC>"); xml.Append(v.rVeic.Rntrc_prop.Trim()); xml.Append("</RNTRC>"); #endregion #region xNome xml.Append("<xNome>"); xml.Append(v.rVeic.Nm_proprietario.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xNome>"); #endregion #region IE if (!string.IsNullOrEmpty(v.rVeic.Insc_estadual_prop)) { xml.Append("<IE>"); xml.Append(v.rVeic.Insc_estadual_prop.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</IE>"); } #endregion #region UF xml.Append("<UF>"); xml.Append(v.rVeic.Uf_proprietario.Trim()); xml.Append("</UF>"); #endregion #region tpProp xml.Append("<tpProp>"); xml.Append(v.rVeic.Tp_proprietario.Trim()); xml.Append("</tpProp>"); #endregion xml.Append("</prop>"); } #endregion #region tpCar xml.Append("<tpCar>"); xml.Append(v.rVeic.Tp_carroceria.Trim()); xml.Append("</tpCar>"); #endregion #region UF xml.Append("<UF>"); xml.Append(v.rVeic.Uf_veiculo.Trim()); xml.Append("</UF>"); #endregion xml.Append("</veicReboque>"); }); #endregion xml.Append("</rodo>"); #endregion xml.Append("</infModal>"); #endregion #region infDoc xml.Append("<infDoc>"); #region infMunDescarga if (p.lDoc.Exists(v => !string.IsNullOrEmpty(v.ChaveCTe))) { string aux = string.Empty; p.lDoc.FindAll(v => !string.IsNullOrEmpty(v.ChaveCTe)).OrderBy(v => v.Cd_cidadeCTe).ToList().ForEach(v => { if (aux.Trim() != v.Cd_cidadeCTe.Trim()) { xml.Append("<infMunDescarga>"); #region cMunDescarga xml.Append("<cMunDescarga>"); xml.Append(v.Cd_cidadeCTe.Trim()); xml.Append("</cMunDescarga>"); #endregion #region xMunDescarga xml.Append("<xMunDescarga>"); xml.Append(v.Ds_cidadeCTe.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xMunDescarga>"); #endregion #region infCTe p.lDoc.FindAll(x => !string.IsNullOrEmpty(x.ChaveCTe) && x.Cd_cidadeCTe.Trim().Equals(v.Cd_cidadeCTe)).ForEach(x => { xml.Append("<infCTe>"); #region chCTe xml.Append("<chCTe>"); xml.Append(x.ChaveCTe.Trim()); xml.Append("</chCTe>"); #endregion xml.Append("</infCTe>"); }); #endregion xml.Append("</infMunDescarga>"); } aux = v.Cd_cidadeCTe; }); } if (p.lDoc.Exists(v => !string.IsNullOrEmpty(v.ChaveNFe))) { string aux = string.Empty; p.lDoc.FindAll(v => !string.IsNullOrEmpty(v.ChaveNFe)).OrderBy(v => v.Cd_cidadeNFe).ToList().ForEach(v => { if (aux.Trim() != v.Cd_cidadeNFe.Trim()) { xml.Append("<infMunDescarga>"); #region cMunDescarga xml.Append("<cMunDescarga>"); xml.Append(v.Cd_cidadeNFe.Trim()); xml.Append("</cMunDescarga>"); #endregion #region xMunDescarga xml.Append("<xMunDescarga>"); xml.Append(v.Ds_cidadeNFe.RemoverCaracteres().SubstCaracteresEsp()); xml.Append("</xMunDescarga>"); #endregion p.lDoc.FindAll(x => !string.IsNullOrEmpty(x.ChaveNFe) && x.Cd_cidadeNFe.Trim().Equals(v.Cd_cidadeNFe)).ForEach(x => { #region infNFe xml.Append("<infNFe>"); #region chNFe xml.Append("<chNFe>"); xml.Append(x.ChaveNFe.Trim()); xml.Append("</chNFe>"); #endregion xml.Append("</infNFe>"); #endregion }); xml.Append("</infMunDescarga>"); } aux = v.Cd_cidadeNFe; }); } #endregion xml.Append("</infDoc>"); #endregion p.lSeguro.ForEach(x => { #region seg xml.Append("<seg>"); #region infResp xml.Append("<infResp>"); #region respSeg xml.Append("<respSeg>"); xml.Append(x.Tp_responsavel); //1-Emitente do MDF-e 2-Contratante do servico xml.Append("</respSeg>"); if (x.Tp_responsavel.Trim().Equals("2")) { if (string.IsNullOrWhiteSpace(x.CnpjCpf_responsavel.SoNumero())) { throw new Exception("Obrigatório informar CNPJ/CPF do responsavel pelo seguro quando for por conta do Contratante."); } if (x.CnpjCpf_responsavel.SoNumero().Length.Equals(11)) { xml.Append("<CPF>"); xml.Append(x.CnpjCpf_responsavel.SoNumero()); xml.Append("</CPF>"); } else { xml.Append("<CNPJ>"); xml.Append(x.CnpjCpf_responsavel.SoNumero()); xml.Append("</CNPJ>"); } } else { xml.Append("<CNPJ>"); xml.Append(rCfgMDFe.rEmp.rClifor.Nr_cgc.SoNumero()); xml.Append("</CNPJ>"); } #endregion xml.Append("</infResp>"); #endregion if (!string.IsNullOrWhiteSpace(x.Cd_seguradora)) { #region infSeg xml.Append("<infSeg>"); #region xSeg xml.Append("<xSeg>"); xml.Append(x.Nm_seguradora.RemoverCaracteres().SubstCaracteresEsp().Trim()); xml.Append("</xSeg>"); #endregion #region CNPJ xml.Append("<CNPJ>"); xml.Append(x.Cnpj_seguradora.SoNumero()); xml.Append("</CNPJ>"); #endregion xml.Append("</infSeg>"); #endregion } #region nApol xml.Append("<nApol>"); xml.Append(x.Nr_apolice.Trim()); xml.Append("</nApol>"); #endregion #region nAver if (!string.IsNullOrWhiteSpace(x.Nr_averbacao)) { xml.Append("<nAver>"); xml.Append(x.Nr_averbacao.Trim()); xml.Append("</nAver>"); } #endregion xml.Append("</seg>"); #endregion }); #region tot xml.Append("<tot>"); #region qCTe if (p.lDoc.Count(v => !string.IsNullOrEmpty(v.ChaveCTe)) > 0) { xml.Append("<qCTe>"); xml.Append(p.lDoc.Count(v => !string.IsNullOrEmpty(v.ChaveCTe)).ToString()); xml.Append("</qCTe>"); } #endregion #region qNFe if (p.lDoc.Count(v => !string.IsNullOrEmpty(v.ChaveNFe)) > 0) { xml.Append("<qNFe>"); xml.Append(p.lDoc.Count(v => !string.IsNullOrEmpty(v.ChaveNFe)).ToString()); xml.Append("</qNFe>"); } #endregion #region vCarga xml.Append("<vCarga>"); xml.Append(Convert.ToDecimal(string.Format("{0:N2}", p.lDoc.Sum(v => v.Vl_CargaCTe + v.Vl_NFe))).ToString(new System.Globalization.CultureInfo("en-US", true))); xml.Append("</vCarga>"); #endregion #region cUnid xml.Append("<cUnid>"); xml.Append("01"); //KG xml.Append("</cUnid>"); #endregion #region qCarga xml.Append("<qCarga>"); xml.Append(Convert.ToDecimal(string.Format("{0:N4}", p.lDoc.Sum(v => v.PesoBrutoNFe))).ToString(new System.Globalization.CultureInfo("en-US", true))); xml.Append("</qCarga>"); #endregion xml.Append("</tot>"); #endregion #region Autorização para obter XML if (!string.IsNullOrWhiteSpace(rCfgMDFe.Cnpj_contador.SoNumero())) { #region autXML xml.Append("<autXML>\n"); #region CNPJ xml.Append("<CNPJ>"); xml.Append(rCfgMDFe.Cnpj_contador.SoNumero()); xml.Append("</CNPJ>\n"); #endregion xml.Append("</autXML>\n"); #endregion } #endregion #region infAdic if (!string.IsNullOrEmpty(p.infAdFisco) || !string.IsNullOrEmpty(p.infCpl)) { xml.Append("<infAdic>"); #region infAdFisco if (!string.IsNullOrEmpty(p.infAdFisco)) { xml.Append("<infAdFisco>"); xml.Append(p.infAdFisco.Trim()); xml.Append("</infAdFisco>"); } #endregion #region infCpl if (!string.IsNullOrEmpty(p.infCpl)) { xml.Append("<infCpl>"); xml.Append(p.infCpl.Trim()); xml.Append("</infCpl>"); } #endregion xml.Append("</infAdic>"); } #endregion xml.Append("</infMDFe>"); #endregion xml.Append("</MDFe>"); #endregion //Assinar XML xmlassinado = new Utils.Assinatura.TAssinatura2(rCfgMDFe.Nr_certificado, Utils.Assinatura.TAssinatura2.TTpArq.tpMDFe, xml.ToString()).Assinar(); //Validar Schema XML Utils.ValidaSchema.ValidaXML2.validaXML(xmlassinado, rCfgMDFe.Path_schemas.SeparadorDiretorio() + "mdfe_v" + rCfgMDFe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim()); } p.Xml_mdfe = xmlassinado; //Gravar codigo acesso da nfe e alterar status para nfe gerada na tabela nota fiscal try { System.Collections.Hashtable hs = new System.Collections.Hashtable(4); hs.Add("@P_CHAVE", MontarChaveAcessoMDFe(p, rCfgMDFe) + CalcularDigitoChave(MontarChaveAcessoMDFe(p, rCfgMDFe))); hs.Add("@P_XML", xmlassinado); hs.Add("@P_CD_EMPRESA", p.Cd_empresa); hs.Add("@P_ID_MDFE", p.Id_mdfe); new CamadaDados.TDataQuery().executarSql("update tb_ctr_mdfe set chaveacesso = @P_CHAVE, xml_mdfe = @P_XML, dt_alt = getdate() " + "where cd_empresa = @P_CD_EMPRESA and ID_MDFe = @P_ID_MDFE", hs); } catch { } }); }
public static string ConsultaRetRecepcao(TRegistro_CfgMDFe rCfgMDFe) { string msg = string.Empty; new CamadaDados.Frota.TCD_LoteMDFe().Select( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + rCfgMDFe.Cd_empresa.Trim() + "'" }, new Utils.TpBusca() { vNM_Campo = "a.cStat", vOperador = "=", vVL_Busca = "103" }, new Utils.TpBusca() { vNM_Campo = "a.nRec", vOperador = "is not", vVL_Busca = "null" } }, 0, string.Empty, string.Empty).ForEach(p => { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); xml.Append("<consReciMDFe versao=\"" + rCfgMDFe.Cd_versaomdfe.Trim() + "\" xmlns=\"http://www.portalfiscal.inf.br/mdfe\">"); xml.Append("<tpAmb>"); xml.Append(rCfgMDFe.Tp_ambiente); xml.Append("</tpAmb>"); xml.Append("<nRec>"); xml.Append(p.nRec.PadLeft(15, '0')); xml.Append("</nRec>"); xml.Append("</consReciMDFe>"); //Validar schema xml Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(), rCfgMDFe.Path_schemas.SeparadorDiretorio() + "consReciMDFe_v" + rCfgMDFe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno); } //Conectar Web Service XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.ToString()); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMDFe); //Tratar retorno if (retorno["cStat"].InnerText.Trim().Equals("104")) { p.cStat = retorno["cStat"].InnerText; p.xMotivo = retorno["xMotivo"].InnerText; CamadaNegocio.Frota.TCN_LoteMDFe.Gravar(p, null); msg += "Lote: " + p.Id_lote.ToString() + "\r\nMensagem: " + retorno["xMotivo"].InnerText.Trim() + "\r\n"; //Tratar as Notas do Lote foreach (XmlNode no in retorno.ChildNodes) { if (no.Name.Trim().Equals("protMDFe")) { DateTime?dt_rec = null; try { dt_rec = Convert.ToDateTime(no["infProt"]["dhRecbto"].InnerText); } catch { } //Buscar CTe new CamadaDados.Frota.TCD_Lote_X_MDFe().Select( new TpBusca[] { new TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + rCfgMDFe.Cd_empresa.Trim() + "'" }, new TpBusca() { vNM_Campo = "a.id_lote", vOperador = "=", vVL_Busca = p.Id_lotestr }, new TpBusca() { vNM_Campo = "c.chaveacesso", vOperador = "=", vVL_Busca = "'" + no["infProt"]["chMDFe"].InnerText.Trim() + "'" } }, 1, string.Empty).ForEach(v => { v.dhRecbto = dt_rec; v.nProt = no["infProt"]["cStat"].InnerText.Equals("100") ? no["infProt"]["nProt"].InnerText : string.Empty; v.digVal = no["infProt"]["cStat"].InnerText.Equals("100") ? no["infProt"]["digVal"].InnerText : string.Empty; v.cStat = no["infProt"]["cStat"].InnerText; v.xMotivo = no["infProt"]["xMotivo"].InnerText; v.Xml_lote = no.OuterXml; CamadaNegocio.Frota.TCN_Lote_X_MDFe.Gravar(v, null); }); } } } else { p.cStat = retorno["cStat"].InnerText; p.xMotivo = retorno["xMotivo"].InnerText; CamadaNegocio.Frota.TCN_LoteMDFe.Gravar(p, null); } }); return(msg); }
public static void EnviarLoteMDFe(List <CamadaDados.Frota.TRegistro_MDFe> lMDFe, TRegistro_CfgMDFe rCfgMDFe) { if (lMDFe != null) { //Verificar status do servico junto a receita if (MDFe.StatusServico.TStatusServico.StatusServico(rCfgMDFe).Trim() != "107") { throw new Exception("Serviço indisponivel no momento.\r\nAguarde alguns minutos e tente novamente."); } CamadaDados.Frota.TRegistro_LoteMDFe lote = new CamadaDados.Frota.TRegistro_LoteMDFe(); try { lote.Cd_empresa = rCfgMDFe.Cd_empresa; lote.Tp_ambiente = rCfgMDFe.Tp_ambiente; CamadaNegocio.Frota.TCN_LoteMDFe.Gravar(lote, null); MDFe.GerarArq.TGerarArq.GerarArquivoXml(lMDFe, rCfgMDFe); StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.Append("<enviMDFe xmlns=\"http://www.portalfiscal.inf.br/mdfe\" versao=\"" + rCfgMDFe.Cd_versaomdfe.Trim() + "\">"); xml.Append("<idLote>"); xml.Append(lote.Id_lotestr); xml.Append("</idLote>"); lMDFe.ForEach(p => { //Gravar lote x cte CamadaNegocio.Frota.TCN_Lote_X_MDFe.Gravar( new CamadaDados.Frota.TRegistro_Lote_X_MDFe() { Cd_empresa = p.Cd_empresa, Id_mdfe = p.Id_mdfe, Id_lote = lote.Id_lote }, null); xml.Append(p.Xml_mdfe); }); xml.Append("</enviMDFe>"); //Validar arquivo lote Utils.ValidaSchema.ValidaXML2.validaXML(xml.ToString(), rCfgMDFe.Path_schemas.SeparadorDiretorio() + "enviMDFe_v" + rCfgMDFe.Cd_versaomdfe.Trim() + ".xsd", "MDFE"); if (!string.IsNullOrEmpty(Utils.ValidaSchema.ValidaXML2.Retorno)) { throw new Exception(Utils.ValidaSchema.ValidaXML2.Retorno.Trim()); } //Enviar Lote para Receita XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.ToString()); XmlNode retorno = ConectarWebService(doc.DocumentElement, rCfgMDFe); //Tratar retorno if (retorno != null) { if (retorno["cStat"].InnerText.Trim().Equals("103")) { //Lote recebido com sucesso //Gravar dados do lote no banco de dados lote.cStat = retorno["cStat"].InnerText; lote.xMotivo = retorno["xMotivo"].InnerText; if (retorno["infRec"].FirstChild != null) { try { lote.dhRebcto = DateTime.Parse(retorno["infRec"]["dhRecbto"].InnerText); } catch { } lote.nRec = retorno["infRec"]["nRec"].InnerText; } CamadaNegocio.Frota.TCN_LoteMDFe.Gravar(lote, null); } else { lote.cStat = retorno["cStat"].InnerText; lote.xMotivo = retorno["xMotivo"].InnerText; CamadaNegocio.Frota.TCN_LoteMDFe.Gravar(lote, null); } } else { throw new Exception("Serviço Enviar MDF-e indisponivel no momento."); } } catch (Exception ex) { CamadaNegocio.Frota.TCN_Lote_X_MDFe.Buscar(lote.Cd_empresa, lote.Id_lotestr, null).ForEach(p => CamadaNegocio.Frota.TCN_Lote_X_MDFe.Excluir(p, null)); CamadaNegocio.Frota.TCN_LoteMDFe.Excluir(lote, null); throw new Exception("Erro ao enviar Lote!" + ex.Message.Trim()); } } }