Example #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();
        }
Example #2
0
        /// <summary>
        /// Gerar informacoes do ICMS..
        /// </summary>
        /// <param name="imposto"></param>
        /// <returns></returns>
        private object gerarImpostoICMS(ImpostoItemMovimento imposto)
        {
            var detICMS = new TNFeInfNFeDetImpostoICMS();
            // Gets a NumberFormatInfo associated with the en-US culture.
            NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;

            nfi.NumberDecimalSeparator = ".";

            if (imposto.TipoImposto.CodigoImposto == "ICMS")
            {
                //icms cst 00
                if (imposto.SituacaoTributaria.CodigoCst == "000")
                {
                    var icms00 = new TNFeInfNFeDetImpostoICMSICMS00()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = imposto.Aliquota.ToString(nfi),
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms00;
                }
                //icms cst 10
                else if (imposto.SituacaoTributaria.CodigoCst == "010")
                {
                    var icms10 = new TNFeInfNFeDetImpostoICMSICMS10()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = "0.00",
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms10;
                }
                //icms cst 20
                else if (imposto.SituacaoTributaria.CodigoCst == "020")
                {
                    var icms20 = new TNFeInfNFeDetImpostoICMSICMS20()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = "0.00",
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms20;
                }
                //icms cst 30
                else if (imposto.SituacaoTributaria.CodigoCst == "030")
                {
                    var icms30 = new TNFeInfNFeDetImpostoICMSICMS30()
                    {
                        CST     = imposto.SituacaoTributaria.CodigoCst,
                        modBCST = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig    = Torig.Nacional,
                        pICMSST = imposto.Aliquota.ToString(nfi),
                        vBCST   = imposto.BaseCalculo.ToString(nfi),
                        vICMSST = imposto.ValorImposto.ToString(nfi),
                    };
                    detICMS.DetalheICMS = icms30;
                }
                //icms cst 40, 41, 50 ou 51
                else if (new List <string>()
                {
                    "040", "041", "050", "051"
                }.Contains(imposto.SituacaoTributaria.CodigoCst))
                {
                    var icms40 = new TNFeInfNFeDetImpostoICMSICMS40()
                    {
                        CST        = imposto.SituacaoTributaria.CodigoCst,
                        orig       = Torig.Nacional,
                        motDesICMS = TypeMotivoDesoneracaoICMS40.Outros,
                        vICMSDeson = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms40;
                }
                //icms cst 51/20
                else if (imposto.SituacaoTributaria.CodigoCst == "020")
                {
                    var icms51 = new TNFeInfNFeDetImpostoICMSICMS51()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = "0.00",
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms51;
                }
                //icms cst 60
                else if (imposto.SituacaoTributaria.CodigoCst == "060")
                {
                    var icms60 = new TNFeInfNFeDetImpostoICMSICMS60()
                    {
                        CST        = imposto.SituacaoTributaria.CodigoCst,
                        orig       = Torig.Nacional,
                        pFCPSTRet  = "0.00",
                        pST        = imposto.Aliquota.ToString(nfi),
                        vBCSTRet   = imposto.BaseCalculo.ToString(nfi),
                        vICMSSTRet = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms60;
                }
                //icms cst 70
                else if (imposto.SituacaoTributaria.CodigoCst == "070")
                {
                    var icms70 = new TNFeInfNFeDetImpostoICMSICMS70()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = "0.00",
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms70;
                }
                //icms cst 90
                else if (imposto.SituacaoTributaria.CodigoCst == "090")
                {
                    var icms90 = new TNFeInfNFeDetImpostoICMSICMS90()
                    {
                        CST   = imposto.SituacaoTributaria.CodigoCst,
                        modBC = TypeModalidadeBaseCalculoICMS.ValorOperacao,
                        orig  = Torig.Nacional,
                        pFCP  = "0.00",
                        pICMS = "0.00",
                        vBC   = imposto.BaseCalculo.ToString(nfi),
                        vFCP  = "0.00",
                        vICMS = imposto.ValorImposto.ToString(nfi)
                    };
                    detICMS.DetalheICMS = icms90;
                }
            }

            return(detICMS);
        }