Beispiel #1
0
        public void SetImposto(int idPedidoItem, int idImposto = 0, string tipo = "", string NCM = "")
        {
            _modelpedidoItem = _modelpedidoItem.FindById(idPedidoItem).FirstOrDefault <Model.PedidoItem>();
            _modelItem       = _modelItem.FindById(_modelpedidoItem.Item).FirstOrDefault <Model.Item>();

            #region IMPOSTO

            if (idImposto == 0)
            {
                if (_modelItem.Count() != 0)
                {
                    switch (tipo)
                    {
                    case "CFe":

                        if (_modelItem.Impostoidcfe == 0)
                        {
                            break;
                        }

                        _modelImposto = _modelImposto.FindById(_modelItem.Impostoidcfe)
                                        .FirstOrDefault <Model.Imposto>();
                        break;

                    default:
                        if (_modelItem.Impostoid == 0)
                        {
                            break;
                        }

                        _modelImposto = _modelImposto.FindById(_modelItem.Impostoid)
                                        .FirstOrDefault <Model.Imposto>();
                        break;
                    }
                }
            }
            else
            {
                _modelImposto = _modelImposto.FindById(idImposto).FirstOrDefault <Model.Imposto>();
            }

            #endregion IMPOSTO

            #region NCM | CEST | ORIGEM

            _modelpedidoItem.Ncm    = string.IsNullOrEmpty(NCM) ? _modelItem.Ncm : NCM;
            _modelpedidoItem.Cest   = _modelItem.Cest;
            _modelpedidoItem.Origem = _modelItem.Origem;

            #endregion NCM | CEST | ORIGEM

            #region CFOP

            _modelpedidoItem.Cfop = _modelImposto.Cfop;

            #endregion CFOP

            #region ICMS

            _modelpedidoItem.Icms = _modelImposto.Icms;

            switch (_modelImposto.Icms)
            {
                #region REGIME NORMAL

            //00 = Tributada integralmente.
            //10 = Tributada e com cobrança do ICMS por substituição tributária
            //20 = Com redução de base de cálculo
            //30 = Isenta ou não tributada e com cobrança do ICMS por substituição tributária
            //40 = Isenta
            //41 = Não tributada
            //50 = Suspensão
            //51 = Diferimento
            //60 = ICMS cobrado anteriormente por substituição tributária
            //70 = Com redução de base de cálculo e cobrança do ICMS por substituição tributária
            //90 = Outros

            case "00":
            case "90":
                _modelpedidoItem.IcmsBase = _modelpedidoItem.Total;
                _modelpedidoItem.IcmsAliq = Validation.RoundAliquotas(_modelImposto.IcmsAliq / 100);
                _modelpedidoItem.IcmsVlr  = Validation.Round(_modelpedidoItem.IcmsBase * _modelpedidoItem.IcmsAliq);
                break;

                #endregion REGIME NORMAL

                #region SIMPLES NACIONAL

            //101 = Tributada pelo Simples Nacional com permissão de crédito
            //102 = Tributada pelo Simples Nacional sem permissão de crédito
            //103 = Isenção do ICMS no Simples Nacional para faixa de receita bruta
            //201 = Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária202 = Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária
            //202
            //203 = Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária
            //300 = Imune
            //400 = Não tributada pelo Simples Nacional
            //500 = ICMS cobrado anteriormente por substituição tributária (substituído) ou por antecipação
            //900 = Outros

            case "101":
                _modelpedidoItem.Icms101Aliq = Validation.RoundAliquotas(_modelImposto.IcmsAliq / 100);
                _modelpedidoItem.Icms101Vlr  =
                    Validation.Round(_modelpedidoItem.Total * _modelpedidoItem.Icms101Aliq);
                break;

            case "201":
            case "202":
                //---------------ICMS
                _modelpedidoItem.IcmsBase = _modelpedidoItem.Total;
                _modelpedidoItem.IcmsAliq = Validation.RoundAliquotas(_modelImposto.IcmsAliq / 100);
                _modelpedidoItem.IcmsVlr  = Validation.Round(_modelpedidoItem.IcmsBase * _modelpedidoItem.IcmsAliq);
                //---------------ICMS ST
                _modelpedidoItem.IcmsStBase =
                    Validation.Round(_modelpedidoItem.IcmsBase +
                                     _modelpedidoItem.IcmsBase * (_modelImposto.IcmsStIva / 100));
                _modelpedidoItem.IcmsStAliq = Validation.RoundAliquotas(_modelImposto.IcmsStAliq / 100);
                if (_modelImposto.IcmsStReducaoAliq > 0)
                {
                    _modelpedidoItem.IcmsStBase = Validation.Round(
                        _modelpedidoItem.IcmsStBase -
                        _modelpedidoItem.IcmsStBase * (_modelImposto.IcmsStReducaoAliq / 100));
                }
                _modelpedidoItem.Icmsstvlr =
                    Validation.Round(_modelpedidoItem.IcmsStBase * _modelpedidoItem.IcmsStAliq);

                //---------------ICMS ST - ICMS
                _modelpedidoItem.Icmsstvlr =
                    Validation.Round(_modelpedidoItem.Icmsstvlr - _modelpedidoItem.IcmsVlr);

                _modelpedidoItem.IcmsBase = 0;
                _modelpedidoItem.IcmsAliq = 0;
                _modelpedidoItem.IcmsVlr  = 0;
                break;

            case "900":
                break;

                #endregion SIMPLES NACIONAL

            default:

                _modelpedidoItem.IcmsBase = 0;
                _modelpedidoItem.IcmsAliq = 0;
                _modelpedidoItem.IcmsVlr  = 0;

                _modelpedidoItem.IcmsStAliq           = 0;
                _modelpedidoItem.IcmsStBase           = 0;
                _modelpedidoItem.IcmsStBaseComReducao = 0;
                _modelpedidoItem.IcmsStReducaoAliq    = 0;

                break;
            }

            if (_modelpedidoItem.IcmsAliq > 0)
            {
                _modelpedidoItem.IcmsAliq = _modelpedidoItem.IcmsAliq * 100;
            }

            if (_modelpedidoItem.IcmsStAliq > 0)
            {
                _modelpedidoItem.IcmsStAliq = _modelpedidoItem.IcmsStAliq * 100;
            }

            #endregion ICMS

            #region IPI

            _modelpedidoItem.Ipi = _modelImposto.Ipi;

            switch (_modelImposto.Ipi)
            {
            case "50":
            case "99":
                if (_modelImposto.IpiAliq > 0)
                {
                    _modelpedidoItem.IpiAliq = Validation.RoundAliquotas(_modelImposto.IpiAliq / 100);
                    _modelpedidoItem.IpiVlr  = Validation.Round(_modelpedidoItem.Total * _modelpedidoItem.IpiAliq);
                }

                break;

            default:
                _modelpedidoItem.Ipi     = "0";
                _modelpedidoItem.IpiAliq = 0;
                _modelpedidoItem.IpiVlr  = 0;
                break;
            }

            #endregion IPI

            #region PIS

            _modelpedidoItem.Pis = _modelImposto.Pis;

            switch (_modelImposto.Pis)
            {
            case "01":
            case "99":
                if (_modelImposto.PisAliq > 0)
                {
                    _modelpedidoItem.PisAliq = Validation.RoundAliquotas(_modelImposto.PisAliq / 100);
                    _modelpedidoItem.PisVlr  = Validation.Round(_modelpedidoItem.Total * _modelpedidoItem.PisAliq);
                }

                break;

            default:
                _modelpedidoItem.PisAliq = 0;
                _modelpedidoItem.PisVlr  = 0;
                break;
            }

            if (_modelpedidoItem.PisAliq > 0)
            {
                _modelpedidoItem.PisAliq = _modelpedidoItem.PisAliq * 100;
            }

            if (string.IsNullOrEmpty(_modelpedidoItem.Pis))
            {
                _modelpedidoItem.Pis = "0";
            }

            #endregion PIS

            #region COFINS

            _modelpedidoItem.Cofins = _modelImposto.Cofins;

            switch (_modelImposto.Cofins)
            {
            case "01":
            case "99":
                if (_modelImposto.CofinsAliq > 0)
                {
                    _modelpedidoItem.CofinsAliq = Validation.RoundAliquotas(_modelImposto.CofinsAliq / 100);
                    _modelpedidoItem.CofinsVlr  =
                        Validation.Round(_modelpedidoItem.Total * _modelpedidoItem.CofinsAliq);
                }

                break;

            default:
                _modelpedidoItem.CofinsAliq = 0;
                _modelpedidoItem.CofinsVlr  = 0;
                break;
            }

            if (_modelpedidoItem.CofinsAliq > 0)
            {
                _modelpedidoItem.CofinsAliq = _modelpedidoItem.CofinsAliq * 100;
            }

            if (string.IsNullOrEmpty(_modelpedidoItem.Cofins))
            {
                _modelpedidoItem.Cofins = "0";
            }

            #endregion COFINS

            #region vTotTrib

            _modelpedidoItem.Federal =
                Validation.Round(_modelpedidoItem.Total * Validation.Round(_modelItem.AliqFederal / 100));
            _modelpedidoItem.Estadual =
                Validation.Round(_modelpedidoItem.Total * Validation.Round(_modelItem.AliqEstadual / 100));
            _modelpedidoItem.Municipal =
                Validation.Round(_modelpedidoItem.Total * Validation.Round(_modelItem.AliqMunicipal / 100));

            #endregion vTotTrib

            _modelpedidoItem.Save(_modelpedidoItem);
        }