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(); }
/// <summary> /// Importa os produtos de uma Nfe /// </summary> /// <param name="nfe"></param> public List <EntradaProduto> Importar(TNfeProc nfe) { const string VERSAO2 = "2.00"; const string VERSAO3 = "3.10"; const string VERSAO4 = "4.00"; try { CultureInfo ci = new CultureInfo("en-US"); // usado para connversão dos números do xml string numeroNF = nfe.NFe.infNFe.ide.nNF; string versaoNF = nfe.NFe.infNFe.versao; string cpf_cnpjFornecedor = nfe.NFe.infNFe.emit.Item; IEnumerable <Entrada> entradas = GerenciadorEntrada.GetInstance().ObterPorNumeroNotaFiscalFornecedor(numeroNF, cpf_cnpjFornecedor); if (entradas.Count() == 0) { throw new NegocioException("A entrada não foi encontrada para realizar o cadastro de produtos"); } Entrada entrada = entradas.ElementAtOrDefault(0); List <EntradaProduto> listaProtutos = new List <EntradaProduto>(); foreach (TNFeInfNFeDet produto in nfe.NFe.infNFe.det) { EntradaProduto entradaProduto = new EntradaProduto(); entradaProduto.Cfop = Convert.ToInt32(produto.prod.CFOP); entradaProduto.CodEntrada = entrada.CodEntrada; entradaProduto.CodFornecedor = entrada.CodFornecedor; ProdutoPesquisa produtoPesquisa = null; if (!string.IsNullOrEmpty(produto.prod.cEAN)) { produtoPesquisa = GerenciadorProduto.GetInstance().ObterPorCodigoBarraExato(produto.prod.cEAN).ElementAtOrDefault(0); } entradaProduto.CodProduto = (produtoPesquisa != null) ? produtoPesquisa.CodProduto : 1; entradaProduto.DataEntrada = entrada.DataEntrada; entradaProduto.FornecedorEhFabricante = entrada.FornecedorEhFabricante; if (entrada.ValorFrete > 0) { entradaProduto.Frete = ((entrada.ValorFrete / entrada.TotalProdutos) * 100); } else { entradaProduto.Frete = 0; } entradaProduto.Ncmsh = produto.prod.NCM; entradaProduto.NomeProduto = produto.prod.xProd.Length > 50 ? produto.prod.xProd.Substring(0, 50).ToUpper() : produto.prod.xProd.ToUpper(); entradaProduto.Quantidade = Convert.ToDecimal(produto.prod.qCom, ci); entradaProduto.QuantidadeEmbalagem = (produtoPesquisa == null) ? 1 : produtoPesquisa.QuantidadeEmbalagem; entradaProduto.Simples = (produtoPesquisa == null) ? 8 : produtoPesquisa.Simples; entradaProduto.UnidadeCompra = produto.prod.uCom; entradaProduto.ValorDesconto = Convert.ToDecimal(produto.prod.vDesc, ci); entradaProduto.ValorUnitario = Convert.ToDecimal(produto.prod.vUnCom, ci); entradaProduto.Desconto = Convert.ToDecimal(produto.prod.vDesc, ci) / entradaProduto.ValorTotal * 100; entradaProduto.CodigoBarra = produto.prod.cEAN; entradaProduto.ReferenciaFabricante = produto.prod.cProd; for (int i = 0; i < produto.imposto.Items.Length; i++) { if (produto.imposto.Items[i] is TNFeInfNFeDetImpostoICMS) { var icms = ((TNFeInfNFeDetImpostoICMS)produto.imposto.Items[i]).Item; if (icms is TNFeInfNFeDetImpostoICMSICMS00) { TNFeInfNFeDetImpostoICMSICMS00 icms00 = ((TNFeInfNFeDetImpostoICMSICMS00)icms);; entradaProduto.BaseCalculoICMS = Convert.ToDecimal(icms00.vBC, ci); entradaProduto.BaseCalculoICMSST = 0; entradaProduto.CodCST = icms00.orig.ToString().Substring(4) + icms00.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms00.orig.ToString().Substring(4) + icms00.CST.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms00.pICMS, ci); entradaProduto.IcmsSubstituto = 0; } else if (icms is TNFeInfNFeDetImpostoICMSICMS10) { TNFeInfNFeDetImpostoICMSICMS10 icms10 = ((TNFeInfNFeDetImpostoICMSICMS10)icms);; entradaProduto.BaseCalculoICMS = Convert.ToDecimal(icms10.vBC, ci); entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms10.vBCST, ci); entradaProduto.CodCST = icms10.orig.ToString().Substring(4) + icms10.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms10.orig.ToString().Substring(4) + icms10.CST.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms10.pICMS, ci); if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; //Convert.ToDecimal(icms10.pICMSST, ci); } } else if (icms is TNFeInfNFeDetImpostoICMSICMS20) { TNFeInfNFeDetImpostoICMSICMS20 icms20 = ((TNFeInfNFeDetImpostoICMSICMS20)icms);; entradaProduto.BaseCalculoICMS = Convert.ToDecimal(icms20.vBC, ci); entradaProduto.BaseCalculoICMSST = 0; entradaProduto.CodCST = icms20.orig.ToString().Substring(4) + icms20.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms20.orig.ToString().Substring(4) + icms20.CST.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms20.pICMS, ci); entradaProduto.IcmsSubstituto = 0; //Convert.ToDecimal(icms10.pICMSST, ci); } else if (icms is TNFeInfNFeDetImpostoICMSICMS30) { TNFeInfNFeDetImpostoICMSICMS30 icms30 = ((TNFeInfNFeDetImpostoICMSICMS30)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms30.vBCST, ci); entradaProduto.CodCST = icms30.orig.ToString().Substring(4) + icms30.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms30.orig.ToString().Substring(4) + icms30.CST.ToString().Substring(4); entradaProduto.Icms = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; //Convert.ToDecimal(icms10.pICMSST, ci); } } else if (icms is TNFeInfNFeDetImpostoICMSICMS40) { TNFeInfNFeDetImpostoICMSICMS40 icms40 = ((TNFeInfNFeDetImpostoICMSICMS40)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = 0; entradaProduto.CodCST = icms40.orig.ToString().Substring(4) + icms40.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms40.orig.ToString().Substring(4) + icms40.CST.ToString().Substring(4); entradaProduto.Icms = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; //Convert.ToDecimal(icms10.pICMSST, ci); } } else if (icms is TNFeInfNFeDetImpostoICMSICMS60) { TNFeInfNFeDetImpostoICMSICMS60 icms60 = ((TNFeInfNFeDetImpostoICMSICMS60)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms60.vBCSTRet, ci); entradaProduto.CodCST = icms60.orig.ToString().Substring(4) + icms60.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms60.orig.ToString().Substring(4) + icms60.CST.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms60.vICMSSTRet, ci); if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; //Convert.ToDecimal(icms10.pICMSST, ci); } } else if (icms is TNFeInfNFeDetImpostoICMSICMS70) { TNFeInfNFeDetImpostoICMSICMS70 icms70 = ((TNFeInfNFeDetImpostoICMSICMS70)icms);; entradaProduto.BaseCalculoICMS = Convert.ToDecimal(icms70.vBC, ci); entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms70.vBCST, ci); entradaProduto.CodCST = icms70.orig.ToString().Substring(4) + icms70.CST.ToString().Substring(4); entradaProduto.CodCSTNFe = icms70.orig.ToString().Substring(4) + icms70.CST.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms70.pICMS, ci); if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; //Convert.ToDecimal(icms10.pICMSST, ci); } } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN101) { TNFeInfNFeDetImpostoICMSICMSSN101 icms101 = ((TNFeInfNFeDetImpostoICMSICMSSN101)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = 0; entradaProduto.CodCST = icms101.orig.ToString().Substring(4) + icms101.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms101.orig.ToString().Substring(4) + icms101.CSOSN.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms101.pCredSN, ci); entradaProduto.IcmsSubstituto = 0; } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN102) { TNFeInfNFeDetImpostoICMSICMSSN102 icms102 = ((TNFeInfNFeDetImpostoICMSICMSSN102)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = 0; entradaProduto.CodCST = icms102.orig.ToString().Substring(4) + icms102.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms102.orig.ToString().Substring(4) + icms102.CSOSN.ToString().Substring(4); entradaProduto.Icms = 0; entradaProduto.IcmsSubstituto = 0; } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN900) { TNFeInfNFeDetImpostoICMSICMSSN900 icms900 = ((TNFeInfNFeDetImpostoICMSICMSSN900)icms);; entradaProduto.BaseCalculoICMS = Convert.ToDecimal(icms900.vBC, ci); entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms900.vBCST, ci); entradaProduto.CodCST = icms900.orig.ToString().Substring(4) + icms900.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms900.orig.ToString().Substring(4) + icms900.CSOSN.ToString().Substring(4); entradaProduto.Icms = Convert.ToDecimal(icms900.pICMS, ci); entradaProduto.IcmsSubstituto = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; } } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN201) { TNFeInfNFeDetImpostoICMSICMSSN201 icms201 = ((TNFeInfNFeDetImpostoICMSICMSSN201)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms201.vBCST, ci); entradaProduto.CodCST = icms201.orig.ToString().Substring(4) + icms201.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms201.orig.ToString().Substring(4) + icms201.CSOSN.ToString().Substring(4); entradaProduto.Icms = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; } } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN202) { TNFeInfNFeDetImpostoICMSICMSSN202 icms202 = ((TNFeInfNFeDetImpostoICMSICMSSN202)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms202.vBCST, ci); entradaProduto.CodCST = icms202.orig.ToString().Substring(4) + icms202.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms202.orig.ToString().Substring(4) + icms202.CSOSN.ToString().Substring(4); entradaProduto.Icms = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; } } else if (icms is TNFeInfNFeDetImpostoICMSICMSSN500) { TNFeInfNFeDetImpostoICMSICMSSN500 icms500 = ((TNFeInfNFeDetImpostoICMSICMSSN500)icms);; entradaProduto.BaseCalculoICMS = 0; entradaProduto.BaseCalculoICMSST = Convert.ToDecimal(icms500.vBCSTRet, ci); entradaProduto.CodCST = icms500.orig.ToString().Substring(4) + icms500.CSOSN.ToString().Substring(4); entradaProduto.CodCSTNFe = icms500.orig.ToString().Substring(4) + icms500.CSOSN.ToString().Substring(4); entradaProduto.Icms = 0; if (entrada.TotalProdutosST > 0) { entradaProduto.IcmsSubstituto = entrada.TotalSubstituicao / entrada.TotalProdutosST * 100; } } else { throw new NegocioException("Existe um imposto ICMS não tratado pela importação. Avise ao administrador."); } } else if (versaoNF.Equals(VERSAO2)) { if (produto.imposto.Items[i] is Dominio.NFE2.TNFeInfNFeDetImpostoIPI) { Dominio.NFE2.TNFeInfNFeDetImpostoIPI impostoIPI = (Dominio.NFE2.TNFeInfNFeDetImpostoIPI)produto.imposto.Items[i]; if (impostoIPI.Item is Dominio.NFE2.TNFeInfNFeDetImpostoIPIIPITrib) { Dominio.NFE2.TNFeInfNFeDetImpostoIPIIPITrib ipiTrib = ((Dominio.NFE2.TNFeInfNFeDetImpostoIPIIPITrib)impostoIPI.Item); entradaProduto.Ipi = Convert.ToDecimal(ipiTrib.vIPI, ci) / entradaProduto.ValorTotal * 100; } } } else if (versaoNF.Equals(VERSAO3) || versaoNF.Equals(VERSAO4)) { if (produto.imposto.Items[i] is TIpi) { TIpi ipi = (TIpi)produto.imposto.Items[i]; if (ipi.Item is TIpiIPITrib) { TIpiIPITrib impostoIPI = (TIpiIPITrib)ipi.Item; entradaProduto.Ipi = Convert.ToDecimal(impostoIPI.vIPI, ci) / entradaProduto.ValorTotal * 100; } else { entradaProduto.Ipi = 0; } } } } Produto produtoCalculo = new Produto() { Desconto = entradaProduto.Desconto, Icms = entradaProduto.Icms, IcmsSubstituto = entradaProduto.IcmsSubstituto, Ipi = entradaProduto.Ipi, Frete = entradaProduto.Frete, Simples = entradaProduto.Simples, UltimoPrecoCompra = (entradaProduto.ValorUnitario / entradaProduto.QuantidadeEmbalagem) }; entradaProduto.PrecoCusto = produtoCalculo.PrecoCusto; if (produtoPesquisa == null) { entradaProduto.LucroPrecoRevenda = 15; entradaProduto.LucroPrecoVendaAtacado = 30; entradaProduto.LucroPrecoVendaVarejo = 35; entradaProduto.QtdProdutoAtacado = 0; } else { entradaProduto.LucroPrecoRevenda = produtoPesquisa.LucroPrecoRevenda; entradaProduto.LucroPrecoVendaAtacado = produtoPesquisa.LucroPrecoVendaAtacado; entradaProduto.LucroPrecoVendaVarejo = produtoPesquisa.LucroPrecoVendaVarejo; entradaProduto.QtdProdutoAtacado = produtoPesquisa.QtdProdutoAtacado; } produtoCalculo.LucroPrecoRevenda = entradaProduto.LucroPrecoRevenda; produtoCalculo.LucroPrecoVendaAtacado = entradaProduto.LucroPrecoVendaAtacado; produtoCalculo.LucroPrecoVendaVarejo = entradaProduto.LucroPrecoVendaVarejo; entradaProduto.PrecoRevendaSugestao = produtoCalculo.PrecoRevendaSugestao; entradaProduto.PrecoVendaAtacadoSugestao = produtoCalculo.PrecoVendaAtacadoSugestao; entradaProduto.PrecoVendaVarejoSugestao = produtoCalculo.PrecoVendaVarejoSugestao; if (produtoPesquisa == null) { entradaProduto.PrecoRevenda = entradaProduto.PrecoRevendaSugestao; entradaProduto.PrecoVendaAtacado = entradaProduto.PrecoVendaAtacadoSugestao; entradaProduto.PrecoVendaVarejo = entradaProduto.PrecoVendaVarejoSugestao; } else { entradaProduto.PrecoRevenda = produtoPesquisa.PrecoRevenda; entradaProduto.PrecoVendaAtacado = produtoPesquisa.PrecoVendaAtacado; entradaProduto.PrecoVendaVarejo = produtoPesquisa.PrecoVendaVarejo; } listaProtutos.Add(entradaProduto); } return(listaProtutos); } catch (Exception e) { throw new NegocioException("Problema durante a importação dos dados dos Produtos da NF-e. Favor contactar administrador.", e); } }
/// <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); }