示例#1
0
        private void UpdateProdutos(TNfeProc nota, IList <Produto> produtos)
        {
            var itensNfe = new List <TNFeInfNFeDet>();

            foreach (var produto in produtos)
            {
                var det = new TNFeInfNFeDet
                {
                    nItem = produto.Num,
                    prod  = new TNFeInfNFeDetProd
                    {
                        cProd    = produto.CodigoProduto,
                        cEAN     = produto.CodigoEANComercial,
                        xProd    = produto.Descricao,
                        NCM      = produto.CodigoNCM,
                        CFOP     = GetProdCfop(produto.CFOP),
                        uCom     = produto.UnidadeComercial,
                        qCom     = double.Parse(produto.QuantidadeComercial).ToString("0.00", enUs),
                        vUnCom   = double.Parse(produto.ValorUnitarioComercializacao).ToString("0.0000", enUs),
                        vProd    = double.Parse(produto.Valor).ToString("0.00", enUs),
                        cEANTrib = produto.CodigoEANTributavel,
                        uTrib    = produto.UnidadeTributavel,
                        qTrib    = double.Parse(produto.QuantidadeTributavel).ToString("0.00", enUs),
                        vUnTrib  = double.Parse(produto.ValorUnitarioTributacao).ToString("0.0000", enUs),
                        indTot   = int.Parse(produto.IndicadorComposicaoValorTotalNFe.Split(new[] { "-" }, StringSplitOptions.None)[0]) == 1 ? TNFeInfNFeDetProdIndTot.Item1 : TNFeInfNFeDetProdIndTot.Item0
                    }
                };

                if (!string.IsNullOrWhiteSpace(produto.nDI))
                {
                    det.prod.DI = new[]
                    {
                        new TNFeInfNFeDetProdDI
                        {
                            nDI         = produto.nDI,
                            dDI         = DateTime.Parse(produto.dDI).ToString("yyyy-MM-dd"),
                            xLocDesemb  = produto.xLocDesemb,
                            UFDesemb    = GetUFEmi(produto.UFDesemb),
                            dDesemb     = DateTime.Parse(produto.dDesemb).ToString("yyyy-MM-dd"),
                            cExportador = produto.cExportador,
                            adi         = new[]
                            {
                                new TNFeInfNFeDetProdDIAdi
                                {
                                    nAdicao     = produto.nAdicao,
                                    nSeqAdic    = produto.nSeqAdic,
                                    cFabricante = produto.cFabricante
                                }
                            }
                        }
                    };
                }

                det.imposto = new TNFeInfNFeDetImposto();

                var tiposImposto = new List <object>();

                //############################ ICMS ############################
                if (!string.IsNullOrWhiteSpace(produto.TributacaoICMS))
                {
                    var tributacaoIcms = produto.TributacaoICMS.Split(new[] { "-" }, StringSplitOptions.None)[0].Trim();
                    var icms           = new TNFeInfNFeDetImpostoICMS();

                    object detIcms;
                    switch (tributacaoIcms)
                    {
                    case "00":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS00();
                        var icms00 = (TNFeInfNFeDetImpostoICMSICMS00)detIcms;
                        if (!string.IsNullOrWhiteSpace(produto.modBC))
                        {
                            var modBC = produto.modBC.Split(new[] { '-' })[0].Trim();
                            switch (modBC)
                            {
                            case "0":
                                icms00.modBC = TNFeInfNFeDetImpostoICMSICMS00ModBC.Item0;
                                break;

                            case "1":
                                icms00.modBC = TNFeInfNFeDetImpostoICMSICMS00ModBC.Item1;
                                break;

                            case "2":
                                icms00.modBC = TNFeInfNFeDetImpostoICMSICMS00ModBC.Item2;
                                break;

                            case "3":
                                icms00.modBC = TNFeInfNFeDetImpostoICMSICMS00ModBC.Item3;
                                break;
                            }
                        }
                        icms00.vBC   = double.Parse(produto.vBC).ToString("0.00", enUs);
                        icms00.pICMS = double.Parse(produto.pICMS).ToString("0.00", enUs);
                        icms00.vICMS = double.Parse(produto.vICMS).ToString("0.00", enUs);
                        break;

                    case "10":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS10();
                        break;

                    case "20":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS20();
                        break;

                    case "30":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS30();
                        break;

                    case "40":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS40();
                        //((TNFeInfNFeDetImpostoICMSICMS40)detIcms).orig =  Torig. produto.OrigemMercadoria;
                        break;

                    case "51":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS51();
                        break;

                    case "60":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS60();
                        break;

                    case "70":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS70();
                        break;

                    case "90":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS90();
                        break;

                    case "Part":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSPart();
                        break;

                    case "101":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN101();
                        break;

                    case "102":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN102();
                        break;

                    case "201":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN201();
                        break;

                    case "202":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN202();
                        break;

                    case "500":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN500();
                        break;

                    case "900":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSSN900();
                        break;

                    case "ST":
                        detIcms = new TNFeInfNFeDetImpostoICMSICMSST();
                        break;

                    default:
                        detIcms = new TNFeInfNFeDetImpostoICMSICMS40();
                        break;
                    }
                    icms.Item = detIcms;
                    tiposImposto.Add(icms);
                    det.imposto.Items = tiposImposto.ToArray();
                }
                //############################ PIS ############################
                if (!string.IsNullOrWhiteSpace(produto.PIS_CST))
                {
                    var pis    = new TNFeInfNFeDetImpostoPIS();
                    var pisCST = new TNFeInfNFeDetImpostoPISPISNT();
                    var pCst   = produto.PIS_CST.Split(new[] { "-" }, StringSplitOptions.None)[0].Trim();
                    switch (pCst)
                    {
                    case "04":
                        pisCST.CST = TNFeInfNFeDetImpostoPISPISNTCST.Item04;
                        break;

                    case "06":
                        pisCST.CST = TNFeInfNFeDetImpostoPISPISNTCST.Item06;
                        break;

                    case "07":
                        pisCST.CST = TNFeInfNFeDetImpostoPISPISNTCST.Item07;
                        break;

                    case "08":
                        pisCST.CST = TNFeInfNFeDetImpostoPISPISNTCST.Item08;
                        break;

                    case "09":
                        pisCST.CST = TNFeInfNFeDetImpostoPISPISNTCST.Item09;
                        break;

                    default:
                        break;
                    }
                    pis.Item        = pisCST;
                    det.imposto.PIS = pis;
                }
                //############################ IPI ############################
                if (!string.IsNullOrWhiteSpace(produto.IPI_CST))
                {
                    var ipi = new TNFeInfNFeDetImpostoIPI();
                    ipi.cEnq = produto.cEnq.Trim();
                    var ipiTrib = new TNFeInfNFeDetImpostoIPIIPITrib();
                    switch (produto.IPI_CST.Split(new[] { '-' })[0].Trim())
                    {
                    case "00":
                        ipiTrib.CST = TNFeInfNFeDetImpostoIPIIPITribCST.Item00;
                        break;

                    case "49":
                        ipiTrib.CST = TNFeInfNFeDetImpostoIPIIPITribCST.Item49;
                        break;

                    case "50":
                        ipiTrib.CST = TNFeInfNFeDetImpostoIPIIPITribCST.Item50;
                        break;

                    case "99":
                        ipiTrib.CST = TNFeInfNFeDetImpostoIPIIPITribCST.Item99;
                        break;
                    }
                    ipiTrib.vIPI = double.Parse(produto.IPI_vIpi).ToString("0.00", enUs);

                    var items = new List <ItemsChoiceType>
                    {
                        ItemsChoiceType.vBC,
                        ItemsChoiceType.pIPI
                    };
                    ipiTrib.ItemsElementName = items.ToArray();
                    ipiTrib.Items            = new[]
                    {
                        produto.IPI_vBC.Replace(",", "."),
                        string.Format("{0:0.00}", double.Parse(produto.IPI_pIpi)).Replace(",", "."),
                    };
                    ipi.Item = ipiTrib;

                    tiposImposto.Add(ipi);
                    det.imposto.Items = tiposImposto.ToArray();
                }
                //############################ COFINS ############################
                if (!string.IsNullOrWhiteSpace(produto.COFINS_CST))
                {
                    det.imposto.COFINS = new TNFeInfNFeDetImpostoCOFINS();
                    var confinsNT = new TNFeInfNFeDetImpostoCOFINSCOFINSNT();
                    var cofinsCST = produto.COFINS_CST.Split(new[] { "-" }, StringSplitOptions.None)[0].Trim();
                    switch (cofinsCST)
                    {
                    case "04":
                        confinsNT.CST = TNFeInfNFeDetImpostoCOFINSCOFINSNTCST.Item04;
                        break;

                    case "06":
                        confinsNT.CST = TNFeInfNFeDetImpostoCOFINSCOFINSNTCST.Item06;
                        break;

                    case "07":
                        confinsNT.CST = TNFeInfNFeDetImpostoCOFINSCOFINSNTCST.Item07;
                        break;

                    case "08":
                        confinsNT.CST = TNFeInfNFeDetImpostoCOFINSCOFINSNTCST.Item08;
                        break;

                    case "09":
                        confinsNT.CST = TNFeInfNFeDetImpostoCOFINSCOFINSNTCST.Item09;
                        break;
                    }
                    det.imposto.COFINS.Item = confinsNT;
                    itensNfe.Add(det);
                }
            }
            nota.NFe.infNFe.det = itensNfe.ToArray();
        }
示例#2
0
        /// <summary>
        /// Gerar os detalhes da NFe - Itens, impostos
        /// </summary>
        /// <param name="movimento"></param>
        /// <param name="tnfe"></param>
        /// <returns></returns>
        private TNFeInfNFeDet GerarTNFeDetalhes(Movimento movimento, TNFe tnfe)
        {
            try
            {
                // Gets a NumberFormatInfo associated with the en-US culture.
                NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;
                nfi.NumberDecimalSeparator = ".";

                //gera detalhes de item e imposto
                var i = 1; //indice

                //inicializando o array, maximo 990 itens por NFe
                tnfe.infNFe.det = new TNFeInfNFeDet[990];

                var det = new TNFeInfNFeDet();

                foreach (var prod in movimento.ItensMovimento)
                {
                    //numero do item
                    det.nItem = i.ToString();

                    //gerar detalhe dos produtos
                    det.prod = new TNFeInfNFeDetProd()
                    {
                        cProd    = prod.Produto.CodigoBarras,
                        xProd    = prod.Produto.DescricaoProduto,
                        cEAN     = "",
                        CFOP     = prod.Cfop.CodigoCfop,
                        CEST     = "",
                        cEANTrib = "",
                        indTot   = TNFeInfNFeDetProdIndTot.ValorProdutoCompoeTotalNF,
                        NCM      = prod.Produto.CodigoNCM,
                        qCom     = prod.Quantidade.ToString(nfi),
                        qTrib    = prod.Quantidade.ToString(nfi),
                        uCom     = prod.Produto.UnidadeMedida.NomeUnidadeMedida,
                        uTrib    = prod.Produto.UnidadeMedida.NomeUnidadeMedida,
                        vDesc    = "0.00",
                        vFrete   = "0.00",
                        vOutro   = "0.00",
                        vSeg     = "0.00",
                        vUnCom   = prod.ValorUnitario.ToString(nfi),
                        vUnTrib  = prod.ValorUnitario.ToString(nfi),
                        vProd    = prod.TotalItem.ToString(nfi)
                    };

                    var impostosItem = new TNFeInfNFeDetImposto();
                    det.imposto       = impostosItem;
                    det.imposto.Items = new object[prod.ImpostosItemMovimento.Count];

                    //gerar impostos
                    foreach (var imp in prod.ImpostosItemMovimento)
                    {
                        if (imp.TipoImposto.CodigoImposto == "PIS")
                        {
                            det.imposto.PIS = gerarImpostoPIS(imp);
                        }

                        else if (imp.TipoImposto.CodigoImposto == "COFINS")
                        {
                            det.imposto.COFINS = gerarImpostoCOFINS(imp);
                        }

                        else if (imp.TipoImposto.CodigoImposto == "ICMS")
                        {
                            det.imposto.Items[i] = gerarImpostoICMS(imp);
                        }
                    }

                    //adicionando o item no array de detalhes da NF
                    tnfe.infNFe.det[i] = det;
                    i++;
                }

                return(det);
            }
            catch (Exception)
            {
                throw;
            }
        }