Beispiel #1
0
        public static ImpostoProdutoDocumento PreencherImpostosProdutoDocumento(ProdutoDocumento p, long intCodigoEmpresa, long longCodigoPessoa, int intCodigoTipoOperacao, int intCodigoAplicacaoUso, decimal decValorFrete, bool CalcularImpostos)
        {
            try
            {
                if (intCodigoTipoOperacao == 0)
                {
                    return(null);
                }

                ImpostoProdutoDocumento imp = new ImpostoProdutoDocumento();

                PIS    pis    = new PIS();
                PISDAL pisDAL = new PISDAL();

                COFINS    cofins    = new COFINS();
                COFINSDAL cofinsDAL = new COFINSDAL();

                RegFisIPI      ipi    = new RegFisIPI();
                RegraFisIPIDAL ipiDAL = new RegraFisIPIDAL();

                RegFisIcms    regICMS    = new RegFisIcms();
                RegFisIcmsDAL regICMSDAL = new RegFisIcmsDAL();

                TipoOperacao    tpOP    = new TipoOperacao();
                TipoOperacaoDAL tpOPDAL = new TipoOperacaoDAL();
                tpOP = tpOPDAL.PesquisarTipoOperacao(intCodigoTipoOperacao);

                Produto    produto    = new Produto();
                ProdutoDAL produtoDAL = new ProdutoDAL();
                produto = produtoDAL.PesquisarProduto(p.CodigoProduto);

                int CodigoPISUtilizado    = 0;
                int CodigoCOFINSUtilizado = 0;

                switch (tpOP.CodigoPrecedenciaImpostoPIS_COFINS)
                {
                case 159:
                    Pessoa    pessoa    = new Pessoa();
                    PessoaDAL pessoaDAL = new PessoaDAL();
                    if (produto.CodigoPIS != 0 || produto.CodigoCOFINS != 0)
                    {
                        pessoa = pessoaDAL.PesquisarPessoa(longCodigoPessoa);
                    }

                    //PIS
                    if (produto.CodigoPIS == 0)    //SE NÃO EXISTIR PIS NO PRODUTO
                    {
                        if (pessoa.CodigoPIS == 0)
                        {
                            CodigoPISUtilizado = tpOP.CodigoPIS;    //SE NÃO EXISTIR PIS NO PESSOA E PRODUTO
                        }
                        else
                        {
                            CodigoPISUtilizado = pessoa.CodigoPIS;
                        }
                    }
                    else
                    {
                        CodigoPISUtilizado = produto.CodigoPIS;
                    }
                    //FIM PIS

                    //COFINS
                    if (produto.CodigoCOFINS == 0)    //SE NÃO EXISTIR COFINS NO PRODUTO
                    {
                        if (pessoa.CodigoCOFINS == 0)
                        {
                            CodigoCOFINSUtilizado = tpOP.CodigoCOFINS;    //SE NÃO EXISTIR COFINS NO PESSOA E PRODUTO
                        }
                        else
                        {
                            CodigoCOFINSUtilizado = pessoa.CodigoCOFINS;
                        }
                    }
                    else
                    {
                        CodigoCOFINSUtilizado = produto.CodigoCOFINS;
                    }
                    //FIM COFINS

                    break;

                case 160:
                    //PIS
                    //FIM PIS

                    //COFINS
                    //FIM COFINS
                    break;
                }

                if (CodigoPISUtilizado != 0)
                {
                    pis = pisDAL.PesquisarPISIndice(CodigoPISUtilizado);
                }

                if (CodigoCOFINSUtilizado != 0)
                {
                    cofins = cofinsDAL.PesquisarCOFINSIndice(CodigoCOFINSUtilizado);
                }

                regICMS = regICMSDAL.ExecutaSP_BUSCA_REGRA_ICMS(intCodigoTipoOperacao, intCodigoEmpresa, longCodigoPessoa, intCodigoAplicacaoUso);

                imp.CodigoDocumento        = p.CodigoDocumento;
                imp.CodigoProdutoDocumento = p.CodigoItem;

                if (regICMS != null)
                {
                    imp.ValorMVA_Saida       = regICMS.MVAOriginal;
                    imp.ValorMVA_Entrada     = regICMS.MVAEntrada;
                    imp.PercentualICMS       = RetornaPercentualICMS(regICMS);
                    imp.ValorBaseCalculoICMS = p.ValorTotalItem;
                }

                //testar se exite IPI
                imp.ValorBaseCalculoIPI = p.ValorTotalItem;
                imp.PercentualIPI       = 5;

                if (pis != null)
                {
                    imp.ValorBaseCalculoPIS = p.ValorTotalItem;
                    imp.PercentualPIS       = Convert.ToDecimal(pis.ValorPIS);
                }

                if (cofins != null)
                {
                    imp.ValorBaseCalculoCOFINS = p.ValorTotalItem;
                    imp.PercentualCOFINS       = Convert.ToDecimal(cofins.ValorCOFINS);
                }


                if (CalcularImpostos)
                {
                    imp.ValorICMS   = Habil_Impostos.CalcularICMS(p.ValorTotalItem, imp.PercentualICMS, regICMS);
                    imp.ValorIPI    = Habil_Impostos.CalcularIPI(p.ValorTotalItem, imp.PercentualIPI);
                    imp.ValorPIS    = Habil_Impostos.CalcularPIS(p.ValorTotalItem, imp.PercentualPIS);
                    imp.ValorCOFINS = Habil_Impostos.CalcularCOFINS(p.ValorTotalItem, imp.PercentualCOFINS);
                }

                return(imp);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao calcular impostos: " + ex.Message.ToString());
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Método que retorna valor do ICMS
        /// </summary>
        /// <param name="decBaseCalculo"></param>
        /// <param name="decAliquotaICMS"></param>
        /// <returns></returns>
        public static decimal CalcularICMS(decimal decBaseCalculo, decimal decAliquotaICMS, RegFisIcms regICMS)
        {
            decimal decValorICMS_ST = 0;

            if (regICMS.CodHabil_RegTributario != 0)
            {
                if (regICMS.CodHabil_RegTributario == 3)  //REGIME NORMAL
                {
                    switch (regICMS.CodCST_CSOSN)
                    {
                    case 00:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CST00ICMS / 100);
                        break;

                    case 10:
                        if (regICMS.CST10MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST10MVASaida / 100)) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100);
                        }
                        break;

                    case 20:
                        decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CST20ReducaoBCICMS / 100)) * (regICMS.CST20ICMS / 100));
                        break;

                    case 30:
                        if (regICMS.CST10MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST10MVASaida / 100)) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100);
                        }
                        break;

                    case 40:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100);
                        break;

                    case 41:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100);
                        break;

                    case 50:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100);
                        break;

                    case 51:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CST51ICMS / 100);
                        break;

                    case 70:
                        if (regICMS.CST70MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST70MVASaida / 100)) * (1 - (regICMS.CST70ReducaoBCICMSST / 100)) * (regICMS.CST70ICMSProprio / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST70ReducaoBCICMSST / 100)) * (regICMS.CST70ICMSProprio / 100);
                        }
                        break;

                    case 90:
                        decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CST90ReducaoBCICMSST / 100)) * (regICMS.CST90ICMS / 100));
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    switch (regICMS.CodCST_CSOSN)
                    {
                    case 101:
                        decValorICMS_ST = decBaseCalculo * (regICMS.CSOSN101_ICMS_SIMPLES / 100);
                        break;

                    case 201:
                        if (regICMS.CSOSN201_MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN201_MVASaida / 100)) * (1 - (regICMS.CSOSN201_ReducaoBCICMSST / 100)) * (regICMS.CSOSN201_ICMS_SIMPLES / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN201_ReducaoBCICMSST / 100)) * (regICMS.CSOSN201_ICMS_SIMPLES / 100);
                        }
                        break;

                    case 202:
                        if (regICMS.CSOSN202_203_MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN202_203_MVASaida / 100)) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100);
                        }
                        break;

                    case 203:
                        if (regICMS.CSOSN202_203_MVASaida > 0)
                        {
                            decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN202_203_MVASaida / 100)) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100);
                        }
                        else
                        {
                            decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100);
                        }
                        break;

                    case 900:
                        decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CSOSN900_ReducaoBCICMSST / 100)) * (regICMS.CSOSN900_ICMS / 100));
                        break;

                    default:
                        break;
                    }
                }
            }
            return(decValorICMS_ST);
        }
Beispiel #3
0
        public static decimal RetornaPercentualICMS(RegFisIcms regICMS)
        {
            if (regICMS.CodHabil_RegTributario != 0)
            {
                if (regICMS.CodHabil_RegTributario == 3)  //REGIME NORMAL
                {
                    switch (regICMS.CodCST_CSOSN)
                    {
                    case 00:
                        return(regICMS.CST00ICMS);

                    case 10:
                        return(regICMS.CST10ICMS);

                    case 20:
                        return(regICMS.CST20ICMS);

                    case 30:
                        return(regICMS.CST30ICMS);

                    case 40:
                        return(0);

                    case 41:
                        return(0);

                    case 50:
                        return(0);

                    case 51:
                        return(regICMS.CST51ICMS);

                    case 70:
                        return(regICMS.CST70ICMS);

                    case 90:
                        return(regICMS.CST90ICMS);
                    }
                }
                else
                {
                    switch (regICMS.CodCST_CSOSN)
                    {
                    case 101:
                        return(regICMS.CSOSN101_ICMS_SIMPLES);

                    case 201:
                        return(regICMS.CSOSN201_ICMS_SIMPLES);

                    case 202:
                        return(regICMS.CSOSN202_203_ICMS_PROPRIO);

                    case 203:
                        return(regICMS.CSOSN202_203_ICMS_PROPRIO);

                    case 900:
                        return(regICMS.CSOSN900_ICMS_SIMPLES);

                    default:
                        break;
                    }
                }
            }
            return(0);
        }