public float ObtemAliquotaIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { var aliqIcmsProd = produto is Model.Produto ? produto.AliquotaIcms : IcmsProdutoUfDAO.Instance.ObterIcmsPorProduto(null, (uint)produto.IdProd, (uint)_idLoja, (uint?)_idFornec, (uint?)_idCliente); var aliqIcmsStProd = produto is Model.Produto ? produto.AliquotaIcmsSt : IcmsProdutoUfDAO.Instance.ObterAliquotaIcmsSt(_sessao, (uint)produto.IdProd, (uint)_idLoja, (uint?)_idFornec, (uint?)_idCliente); return(produto.AliquotaIcmsSt > 0 ? produto.AliquotaIcmsSt : aliqIcmsStProd > 0 ? aliqIcmsStProd : produto.AliquotaIcms > 0 ? produto.AliquotaIcms : aliqIcmsProd); }
public float ObtemAliquotaInternaIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { // Esse método ainda não é alterado com base nos tipos de cálculo de ICMS ST // conforme definido na tela de configurações var valor = ObtemValorIcmsSt(produto, saida); return(produto.Total > 0 ? (float)((valor / produto.Total) * 100) : 0); }
public decimal ObtemValorIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { var baseCalculo = ObtemBaseCalculoIcmsSt(produto, saida); var aliqIcmsProd = produto is Model.Produto ? produto.AliquotaIcms : IcmsProdutoUfDAO.Instance.ObterIcmsPorProduto(null, (uint)produto.IdProd, (uint)_idLoja, (uint?)_idFornec, (uint?)_idCliente); var aliqIcmsStProd = produto is Model.Produto ? produto.AliquotaIcmsSt : IcmsProdutoUfDAO.Instance.ObterAliquotaIcmsSt(_sessao, (uint)produto.IdProd, (uint)_idLoja, (uint?)_idFornec, (uint?)_idCliente); var valorIcmsADebitar = (produto.ValorIcms > 0 ? produto.ValorIcms : ((produto.Total - produto.ValorDesconto) * (decimal)(aliqIcmsProd / 100))); return(baseCalculo * ((decimal)aliqIcmsStProd / 100) - (_debitarIcmsDoIcmsSt ? valorIcmsADebitar : 0)); }
public decimal ObtemBaseCalculoIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { if (produto.AliquotaIcms == 0) { return(0); } var valorIcmsSt = ObtemValorIcmsSt(produto, saida); return((produto.ValorIcms + valorIcmsSt) / (decimal)(produto.AliquotaIcms / 100)); }
public float ObtemAliquotaInternaIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { var dados = MvaProdutoUfDAO.Instance.ObterDadosParaBuscar(_sessao, (uint)_idLoja, _idFornec, (uint?)_idCliente, saida); var dadosIcms = IcmsProdutoUfDAO.Instance.ObtemPorProduto(_sessao, (uint)produto.IdProd, dados.UfOrigem, dados.UfDestino, dados.TipoCliente); if (dadosIcms == null) { return(0); } var tipoCalculoIcmsSt = ObterCalculoAliquotaIcmsSt(); var aliqICMS = (decimal)dadosIcms.AliquotaInterestadual; var aliqICMSST = (decimal)produto.AliquotaIcmsSt; var aliqIPI = (decimal)produto.AliquotaIpi; if (aliqICMSST == 0) { aliqICMSST = (decimal)dadosIcms.AliquotaIntraestadual; } // SE a origem e destino forem iguais, iguala a alíquota interestadual com a intraestadual, para que o cálculo abaixo // "(aliqICMSST - aliqICMS)" fique correto (zerado) if (!string.IsNullOrEmpty(dados.UfOrigem) && dados.UfOrigem == dados.UfDestino) { aliqICMS = aliqICMSST; } var mva = produto.MvaProdutoNf > 0 ? (decimal)produto.MvaProdutoNf : Math.Round((decimal)MvaProdutoUfDAO.Instance.ObterMvaPorProduto(_sessao, produto.IdProd, (uint)_idLoja, dados.UfOrigem, dados.UfDestino, dados.Simples, dados.TipoCliente, saida), 2); switch (tipoCalculoIcmsSt) { case NFeUtils.ConfigNFe.TipoCalculoIcmsSt.SemIpi: { return((float)((mva * aliqICMSST) / 100 + (aliqICMSST - aliqICMS))); } case NFeUtils.ConfigNFe.TipoCalculoIcmsSt.ComIpiNoCalculo: { return((float)((((aliqIPI * (1 + (mva / 100))) + mva) * aliqICMSST) / 100 + (aliqICMSST - aliqICMS))); } case NFeUtils.ConfigNFe.TipoCalculoIcmsSt.ComIpiEmbutidoNoPreco: { return((float)((((((aliqIPI * (1 + (mva / 100))) + mva) * aliqICMSST) / 100) + (aliqICMSST - aliqICMS)) / (1 + (aliqIPI / 100)))); } default: { throw new NotImplementedException($"Tipo de cálculo { tipoCalculoIcmsSt }"); } } }
public decimal ObtemValorIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { if (produto.AliquotaIcms == 0) { return(0); } var baseCalculo = produto.Total + produto.ValorIpi + produto.ValorFrete + produto.ValorSeguro + produto.ValorOutrasDespesas - produto.ValorDesconto; var valorAgregado = baseCalculo * (decimal)(_margemLucro / 100); return(valorAgregado * (decimal)(_percCargaTributaria / 100)); }
public float ObtemAliquotaIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { if (produto.AliquotaIcms == 0) { return(0); } var valorIcmsSt = ObtemValorIcmsSt(produto, saida); var baseCalculo = ObtemBaseCalculoIcmsSt(produto, saida); return((float)(valorIcmsSt / baseCalculo) * 100); }
public decimal ObtemBaseCalculoIcmsSt(Model.IProdutoIcmsSt produto, bool saida) { var aliqIcmsProd = produto is Model.Produto ? ProdutoDAO.Instance.ObtemValorCampo <float>("AliqIcms", $"IdProd={ produto.IdProd }") : produto.AliquotaIcms; var baseCalc = produto.Total + produto.ValorIpi + produto.ValorFrete + produto.ValorSeguro + produto.ValorOutrasDespesas - produto.ValorDesconto; var tipoCalculoIcmsSt = ObterCalculoAliquotaIcmsSt(); //Chamado: 54090 if (tipoCalculoIcmsSt == NFeUtils.ConfigNFe.TipoCalculoIcmsSt.SemIpi) { baseCalc -= produto.ValorIpi; } // Se o cliente for do Amapá e se ele for da cidade de Amapá ou Santana, // o valor do icms deve ser deduzido direto da BC do ICMS ST if (_idCliente > 0 && !string.IsNullOrEmpty(_suframaCliente)) { if (_codIbgeCidadeCliente == "1600303" || _codIbgeCidadeCliente == "1600600") { var valorIcmsADebitar = produto.ValorIcms > 0 ? produto.ValorIcms : (produto.Total - produto.ValorDesconto) * (decimal)(aliqIcmsProd / 100); baseCalc -= valorIcmsADebitar; } } var mva = produto.MvaProdutoNf > 0 ? produto.MvaProdutoNf : Math.Round(MvaProdutoUfDAO.Instance.ObterMvaPorProduto(_sessao, produto.IdProd, (uint)_idLoja, _idFornec, (uint?)_idCliente, saida), 2); if (UserInfo.GetUserInfo.UfLoja == "AM") { if (produto.PercentualReducaoBaseCalculo > 0) { baseCalc = baseCalc - ((decimal)(produto.PercentualReducaoBaseCalculo / 100) * baseCalc); } baseCalc *= (decimal)(1 + (mva / 100)); } else { baseCalc *= (decimal)(1 + (mva / 100)); if (produto.PercentualReducaoBaseCalculo > 0) { baseCalc *= (decimal)(produto.PercentualReducaoBaseCalculo / 100); } } //Chamado: 54090 if (tipoCalculoIcmsSt == NFeUtils.ConfigNFe.TipoCalculoIcmsSt.ComIpiEmbutidoNoPreco) { baseCalc -= produto.ValorIpi; } return(baseCalc); }