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);
}
}