Esempio n. 1
0
        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()); }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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()); }
        }
Esempio n. 4
0
 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());
     }
 }
Esempio n. 5
0
 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
 }
Esempio n. 6
0
        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();
                }
            }
        }
Esempio n. 7
0
        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.");
            }
        }
Esempio n. 8
0
        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.");
            }
        }
Esempio n. 9
0
        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.");
            }
        }
Esempio n. 10
0
        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
                { }
            });
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
 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());
         }
     }
 }