NFe.ConvertTxt.NFeW.GerarDet C# (CSharp) Method

GerarDet() private method

GerarDet
private GerarDet ( NFe NFe, XmlElement root ) : void
NFe NFe
root System.Xml.XmlElement
return void
        private void GerarDet(NFe NFe, XmlElement root)
        {
            if (NFe.det.Count > 990)
                this.cMensagemErro += "Número máximo de itens excedeu o máximo permitido" + Environment.NewLine;

            foreach (Det det in NFe.det)
            {
                XmlElement rootDet = doc.CreateElement("det");
                XmlAttribute xmlItem = doc.CreateAttribute("nItem");
                xmlItem.Value = det.Prod.nItem.ToString();
                rootDet.Attributes.Append(xmlItem);
                root.AppendChild(rootDet);

                ///
                /// Linha do produto
                /// 
                XmlElement nodeProd = doc.CreateElement("prod");
                rootDet.AppendChild(nodeProd);
                nodeCurrent = nodeProd;

                this.convertToOem = (det.Prod.comb.cProdANP > 0 && det.Prod.comb.cProdANP > 0 ? false : true);

                wCampo(det.Prod.cProd, TpcnTipoCampo.tcStr, TpcnResources.cProd);
                wCampo(det.Prod.cEAN, TpcnTipoCampo.tcStr, TpcnResources.cEAN);
                wCampo(det.Prod.xProd, TpcnTipoCampo.tcStr, TpcnResources.xProd);
                this.convertToOem = true;
                wCampo(det.Prod.NCM, TpcnTipoCampo.tcStr, TpcnResources.NCM);
                wCampo(det.Prod.NVE, TpcnTipoCampo.tcStr, TpcnResources.NVE, ObOp.Opcional);
                wCampo(det.Prod.CEST, TpcnTipoCampo.tcInt, TpcnResources.CEST, ObOp.Opcional);
                wCampo(det.Prod.EXTIPI, TpcnTipoCampo.tcStr, TpcnResources.EXTIPI, ObOp.Opcional);
                wCampo(det.Prod.CFOP, TpcnTipoCampo.tcStr, TpcnResources.CFOP);
                wCampo(det.Prod.uCom, TpcnTipoCampo.tcStr, TpcnResources.uCom);
                wCampo(det.Prod.qCom, TpcnTipoCampo.tcDec4, TpcnResources.qCom);
                wCampo(det.Prod.vUnCom, det.Prod.vUnCom_Tipo, TpcnResources.vUnCom);
                wCampo(det.Prod.vProd, TpcnTipoCampo.tcDec2, TpcnResources.vProd);
                wCampo(det.Prod.cEANTrib, TpcnTipoCampo.tcStr, TpcnResources.cEANTrib);
                wCampo(det.Prod.uTrib, TpcnTipoCampo.tcStr, TpcnResources.uTrib);
                wCampo(det.Prod.qTrib, TpcnTipoCampo.tcDec4, TpcnResources.qTrib);
                wCampo(det.Prod.vUnTrib, det.Prod.vUnTrib_Tipo, TpcnResources.vUnTrib);
                wCampo(det.Prod.vFrete, TpcnTipoCampo.tcDec2, TpcnResources.vFrete, ObOp.Opcional);
                wCampo(det.Prod.vSeg, TpcnTipoCampo.tcDec2, TpcnResources.vSeg, ObOp.Opcional);
                wCampo(det.Prod.vDesc, TpcnTipoCampo.tcDec2, TpcnResources.vDesc, ObOp.Opcional);
                wCampo(det.Prod.vOutro, TpcnTipoCampo.tcDec2, TpcnResources.vOutro, ObOp.Opcional);
                wCampo(det.Prod.indTot, TpcnTipoCampo.tcInt, TpcnResources.indTot);

                #region /// DI

                if (det.Prod.DI.Count > 100)
                    this.cMensagemErro += "Número máximo de itens DI excedeu o máximo permitido" + Environment.NewLine;

                XmlNode oldNode = nodeCurrent;
                foreach (DI di in det.Prod.DI)
                {
                    XmlElement nodeDI = doc.CreateElement("DI");
                    nodeProd.AppendChild(nodeDI);
                    nodeCurrent = nodeDI;

                    wCampo(di.nDI, TpcnTipoCampo.tcStr, TpcnResources.nDI);
                    wCampo(di.dDI, TpcnTipoCampo.tcDatYYYY_MM_DD, TpcnResources.dDI);
                    wCampo(di.xLocDesemb, TpcnTipoCampo.tcStr, TpcnResources.xLocDesemb);
                    wCampo(di.UFDesemb, TpcnTipoCampo.tcStr, TpcnResources.UFDesemb);
                    wCampo(di.dDesemb, TpcnTipoCampo.tcDatYYYY_MM_DD, TpcnResources.dDesemb);

                    if (NFe.infNFe.Versao >= 3)
                    {
                        wCampo((int)di.tpViaTransp, TpcnTipoCampo.tcInt, TpcnResources.tpViaTransp, ObOp.Opcional);
                        wCampo(di.vAFRMM, TpcnTipoCampo.tcDec2, TpcnResources.vAFRMM, di.tpViaTransp == TpcnTipoViaTransp.tvMaritima ? ObOp.Obrigatorio : ObOp.Opcional);
                        wCampo((int)di.tpIntermedio, TpcnTipoCampo.tcInt, TpcnResources.tpIntermedio, ObOp.Opcional);
                        wCampo(di.CNPJ, TpcnTipoCampo.tcStr, TpcnResources.CNPJ, ObOp.Opcional);
                        wCampo(di.UFTerceiro, TpcnTipoCampo.tcStr, TpcnResources.UFTerceiro, ObOp.Opcional);
                    }
                    wCampo(di.cExportador, TpcnTipoCampo.tcStr, TpcnResources.cExportador);
                    //
                    //GerarDetProdDIadi
                    //
                    if (di.adi.Count > 100)
                        this.cMensagemErro += "Número máximo de itens DI->ADI excedeu o máximo permitido" + Environment.NewLine;

                    if (di.adi.Count == 0)
                        this.cMensagemErro += "Número minimo de itens DI->ADI não permitido" + Environment.NewLine;

                    foreach (Adi adi in di.adi)
                    {
                        XmlElement e1 = doc.CreateElement("adi");
                        nodeDI.AppendChild(e1);
                        nodeCurrent = e1;

                        wCampo(adi.nAdicao, TpcnTipoCampo.tcInt, TpcnResources.nAdicao);
                        wCampo(adi.nSeqAdi, TpcnTipoCampo.tcInt, TpcnResources.nSeqAdic);
                        wCampo(adi.cFabricante, TpcnTipoCampo.tcStr, TpcnResources.cFabricante);
                        wCampo(adi.vDescDI, TpcnTipoCampo.tcDec2, TpcnResources.vDescDI, ObOp.Opcional);
                        wCampo(adi.nDraw, TpcnTipoCampo.tcStr, TpcnResources.nDraw, ObOp.Opcional);
                    }
                }
                nodeCurrent = oldNode;
                #endregion

                wCampo(det.Prod.xPed, TpcnTipoCampo.tcStr, TpcnResources.xPed, ObOp.Opcional);
                wCampo(det.Prod.nItemPed, TpcnTipoCampo.tcInt, TpcnResources.nItemPed, ObOp.Opcional);

                #region -- GerarDetProddetExport
                if (det.Prod.detExport.Count > 500)
                    this.cMensagemErro += "Número máximo de itens em 'prod->detExport' excedeu o máximo permitido" + Environment.NewLine;
                foreach (detExport detx in det.Prod.detExport)
                {
                    XmlElement nodeDI = doc.CreateElement("detExport");
                    nodeProd.AppendChild(nodeDI);
                    nodeCurrent = nodeDI;

                    wCampo(detx.nDraw, TpcnTipoCampo.tcStr, TpcnResources.nDraw);

                    if (!string.IsNullOrEmpty(detx.exportInd.nRE))
                    {
                        XmlElement nodeDI2 = doc.CreateElement("exportInd");
                        nodeDI.AppendChild(nodeDI2);
                        nodeCurrent = nodeDI2;

                        wCampo(detx.exportInd.nRE, TpcnTipoCampo.tcStr, TpcnResources.nRE, ObOp.Obrigatorio);
                        wCampo(detx.exportInd.chNFe, TpcnTipoCampo.tcStr, TpcnResources.chNFe, ObOp.Obrigatorio);
                        wCampo(detx.exportInd.qExport, TpcnTipoCampo.tcDec4, TpcnResources.qExport, ObOp.Opcional);
                    }
                }
                nodeCurrent = oldNode;
                #endregion

                wCampo(det.Prod.nFCI, TpcnTipoCampo.tcStr, TpcnResources.nFCI, ObOp.Opcional);

                #region /// veiculos
                if (!string.IsNullOrEmpty(det.Prod.veicProd.chassi))
                {
                    oldNode = nodeCurrent;
                    XmlElement nodeVeic = doc.CreateElement("veicProd");
                    nodeProd.AppendChild(nodeVeic);
                    nodeCurrent = nodeVeic;

                    wCampo(det.Prod.veicProd.tpOp, TpcnTipoCampo.tcStr, TpcnResources.tpOp);
                    wCampo(det.Prod.veicProd.chassi, TpcnTipoCampo.tcStr, TpcnResources.chassi);
                    wCampo(det.Prod.veicProd.cCor, TpcnTipoCampo.tcStr, TpcnResources.cCor);
                    wCampo(det.Prod.veicProd.xCor, TpcnTipoCampo.tcStr, TpcnResources.xCor);
                    wCampo(det.Prod.veicProd.pot, TpcnTipoCampo.tcStr, TpcnResources.pot);
                    wCampo(det.Prod.veicProd.cilin, TpcnTipoCampo.tcStr, TpcnResources.cilin);
                    wCampo(det.Prod.veicProd.pesoL, TpcnTipoCampo.tcStr, TpcnResources.pesoL);
                    wCampo(det.Prod.veicProd.pesoB, TpcnTipoCampo.tcStr, TpcnResources.pesoB);
                    wCampo(det.Prod.veicProd.nSerie, TpcnTipoCampo.tcStr, TpcnResources.nSerie);
                    wCampo(det.Prod.veicProd.tpComb, TpcnTipoCampo.tcStr, TpcnResources.tpComb);
                    wCampo(det.Prod.veicProd.nMotor, TpcnTipoCampo.tcStr, TpcnResources.nMotor);
                    wCampo(det.Prod.veicProd.CMT, TpcnTipoCampo.tcStr, TpcnResources.CMT);
                    wCampo(det.Prod.veicProd.dist, TpcnTipoCampo.tcStr, TpcnResources.dist);
                    wCampo(det.Prod.veicProd.anoMod, TpcnTipoCampo.tcInt, TpcnResources.anoMod, ObOp.Obrigatorio, 4);
                    wCampo(det.Prod.veicProd.anoFab, TpcnTipoCampo.tcInt, TpcnResources.anoFab, ObOp.Obrigatorio, 4);
                    wCampo(det.Prod.veicProd.tpPint, TpcnTipoCampo.tcStr, TpcnResources.tpPint);
                    wCampo(det.Prod.veicProd.tpVeic, TpcnTipoCampo.tcInt, TpcnResources.tpVeic);
                    wCampo(det.Prod.veicProd.espVeic, TpcnTipoCampo.tcInt, TpcnResources.espVeic);
                    wCampo(det.Prod.veicProd.VIN, TpcnTipoCampo.tcStr, TpcnResources.VIN);
                    wCampo(det.Prod.veicProd.condVeic, TpcnTipoCampo.tcStr, TpcnResources.condVeic);
                    wCampo(det.Prod.veicProd.cMod, TpcnTipoCampo.tcStr, TpcnResources.cMod);
                    wCampo(det.Prod.veicProd.cCorDENATRAN, TpcnTipoCampo.tcInt, TpcnResources.cCorDENATRAN, ObOp.Obrigatorio, 2);
                    wCampo(det.Prod.veicProd.lota, TpcnTipoCampo.tcInt, TpcnResources.lota);
                    wCampo(det.Prod.veicProd.tpRest, TpcnTipoCampo.tcInt, TpcnResources.tpRest);

                    nodeCurrent = oldNode;
                }
                #endregion

                #region /// medicamentos
                if (det.Prod.med.Count > 500)
                    this.cMensagemErro += "Número máximo de itens em 'med' excedeu o máximo permitido" + Environment.NewLine;
                foreach (Med med in det.Prod.med)
                {
                    XmlElement e0 = doc.CreateElement("med");
                    nodeProd.AppendChild(e0);
                    nodeCurrent = e0;

                    wCampo(med.nLote, TpcnTipoCampo.tcStr, TpcnResources.nLote);
                    wCampo(med.qLote, TpcnTipoCampo.tcDec3, TpcnResources.qLote);
                    wCampo(med.dFab, TpcnTipoCampo.tcDatYYYY_MM_DD, TpcnResources.dFab);
                    wCampo(med.dVal, TpcnTipoCampo.tcDatYYYY_MM_DD, TpcnResources.dVal);
                    wCampo(med.vPMC, TpcnTipoCampo.tcDec2, TpcnResources.vPMC);
                }
                #endregion

                #region /// armamento
                if (det.Prod.arma.Count > 500)
                    this.cMensagemErro += "Número máximo de itens em 'arma' excedeu o máximo permitido" + Environment.NewLine;
                foreach (Arma arma in det.Prod.arma)
                {
                    XmlElement nodeArma = doc.CreateElement("arma");
                    nodeProd.AppendChild(nodeArma);
                    nodeCurrent = nodeArma;

                    wCampo(arma.tpArma, TpcnTipoCampo.tcInt, TpcnResources.tpArma);
                    wCampo(arma.nSerie, TpcnTipoCampo.tcInt, TpcnResources.nSerie);
                    wCampo(arma.nCano, TpcnTipoCampo.tcInt, TpcnResources.nCano);
                    wCampo(arma.descr, TpcnTipoCampo.tcStr, TpcnResources.descr);
                }
                #endregion

                #region /// combustiveis
                if (det.Prod.comb.cProdANP > 0)
                {
                    XmlElement e0 = doc.CreateElement("comb");
                    nodeProd.AppendChild(e0);
                    nodeCurrent = e0;

                    wCampo(det.Prod.comb.cProdANP, TpcnTipoCampo.tcInt, TpcnResources.cProdANP);
                    wCampo(det.Prod.comb.pMixGN, TpcnTipoCampo.tcDec4, TpcnResources.pMixGN, ObOp.Opcional);
                    if (!string.IsNullOrEmpty(det.Prod.comb.CODIF))
                        wCampo(det.Prod.comb.CODIF, TpcnTipoCampo.tcStr, TpcnResources.CODIF);
                    if (det.Prod.comb.qTemp > 0)
                        wCampo(det.Prod.comb.qTemp, TpcnTipoCampo.tcDec4, TpcnResources.qTemp);
                    wCampo(det.Prod.comb.UFCons, TpcnTipoCampo.tcStr, TpcnResources.UFCons);

                    if ((det.Prod.comb.CIDE.qBCprod > 0) ||
                        (det.Prod.comb.CIDE.vAliqProd > 0) ||
                        (det.Prod.comb.CIDE.vCIDE > 0))
                    {
                        XmlElement e1 = doc.CreateElement("CIDE");
                        e0.AppendChild(e1);
                        nodeCurrent = e1;

                        wCampo(det.Prod.comb.CIDE.qBCprod, TpcnTipoCampo.tcDec4, TpcnResources.qBCProd);
                        wCampo(det.Prod.comb.CIDE.vAliqProd, TpcnTipoCampo.tcDec4, TpcnResources.vAliqProd);
                        wCampo(det.Prod.comb.CIDE.vCIDE, TpcnTipoCampo.tcDec2, TpcnResources.vCIDE);

                        nodeCurrent = e0;
                    }
                    if (det.Prod.comb.encerrante.nBico > 0 &&
                        det.Prod.comb.encerrante.nTanque > 0 &&
                        !string.IsNullOrEmpty(det.Prod.comb.encerrante.vEncIni) &&
                        !string.IsNullOrEmpty(det.Prod.comb.encerrante.vEncFin))
                    {
                        XmlElement e1 = doc.CreateElement("encerrante");
                        e0.AppendChild(e1);
                        nodeCurrent = e1;

                        wCampo((int)det.Prod.comb.encerrante.nBico, TpcnTipoCampo.tcInt, TpcnResources.nBico);
                        wCampo((int)det.Prod.comb.encerrante.nBomba, TpcnTipoCampo.tcInt, TpcnResources.nBomba, ObOp.Opcional);
                        wCampo((int)det.Prod.comb.encerrante.nTanque, TpcnTipoCampo.tcInt, TpcnResources.nTanque);
                        wCampo(det.Prod.comb.encerrante.vEncIni, TpcnTipoCampo.tcStr, TpcnResources.vEncIni);
                        wCampo(det.Prod.comb.encerrante.vEncFin, TpcnTipoCampo.tcStr, TpcnResources.vEncFin);

                        nodeCurrent = e0;
                    }
                }
                #endregion

                wCampo(det.Prod.nRECOPI, TpcnTipoCampo.tcStr, TpcnResources.nRECOPI, ObOp.Opcional);

                GerarDetImposto(NFe, det.Imposto, rootDet);

                GerarDetDevol(det.impostoDevol, rootDet);

                nodeCurrent = rootDet;
                wCampo(det.infAdProd, TpcnTipoCampo.tcStr, TpcnResources.infAdProd, ObOp.Opcional);
            }
        }