public List <CnaeListaServicoParametroMunicipioEntity> Listar(CnaeListaServicoParametroMunicipioEntity model)
        {
            var SQL = new StringBuilder();

            SQL.AppendLine("SELECT vw_gov_cnae_lista_servico_parametro_municipio.CnaeListaServicoId AS CnaeListaServicoId");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CnaeId AS CnaeId");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.ListaServicoId AS ListaServicoId");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.MunicipioId AS MunicipioId");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.ParametroMunicipioId AS ParametroMunicipioId");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CnaeCodigo AS CnaeCodigo");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CnaeCodigoFormatado AS CnaeCodigoFormatado");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CnaeDescricao AS CnaeDescricao");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.ListaServico AS ListaServico");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.ListaServicoDescricao AS ListaServicoDescricao");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.AliquotaIss AS AliquotaIss");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.Uf AS Uf");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.Municipio AS Municipio");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CodigoMunicipioIbge AS CodigoMunicipioIbge");

            SQL.AppendLine("      ,vw_gov_cnae_lista_servico_parametro_municipio.CodigoTributarioMunicipio AS CodigoTributarioMunicipio");

            SQL.AppendLine("  FROM db_global.dbo.vw_gov_cnae_lista_servico_parametro_municipio");

            SQL.AppendLine(" WHERE 1 = 1");

            if (model.CnaeId > 0)
            {
                SQL.Append("   AND vw_gov_cnae_lista_servico_parametro_municipio.CnaeId = ").Append(model.CnaeId).AppendLine();
            }

            if (model.ListaServicoId > 0)
            {
                SQL.Append("   AND vw_gov_cnae_lista_servico_parametro_municipio.ListaServicoId = ").Append(model.ListaServicoId).AppendLine();
            }

            if (!string.IsNullOrWhiteSpace(model.CodigoMunicipioIbge))
            {
                SQL.Append("   AND vw_gov_cnae_lista_servico_parametro_municipio.CodigoMunicipioIbge = '").Append(model.CodigoMunicipioIbge).AppendLine("'");
            }

            using (var dataTable = DataBase.Select(SQL))
            {
                return(dataTable == null ? null : DataTableUtil.DataTableToList <CnaeListaServicoParametroMunicipioEntity>(dataTable));
            }
        }
Ejemplo n.º 2
0
        private Servico Servico(GrvEntity grv, NfeViewFaturamentoComposicaoAgrupadoEntity composicao, Prestador prestador, ClienteDepositoEntity clienteDeposito, List <NfeRegraEntity> nfeRegras, string descricaoConfiguracaoNfe, bool isDev)
        {
            CnaeListaServicoParametroMunicipioEntity CnaeListaServicoParametroMunicipio = new CnaeListaServicoParametroMunicipioEntity
            {
                CnaeId = composicao.CnaeId,

                ListaServicoId = composicao.ListaServicoId,

                CodigoMunicipioIbge = prestador.codigo_municipio
            };

            if ((CnaeListaServicoParametroMunicipio = new CnaeListaServicoParametroMunicipioController().Selecionar(CnaeListaServicoParametroMunicipio)) == null)
            {
                throw new Exception("Associação entre CNAE, Lista de Serviço e Município inexistente");
            }

            decimal valorIss = 0;

            decimal AliquotaIss = 0;

            GravarLog("");
            GravarLog($"GRV {grv.NumeroFormularioGrv} ({(isDev ? "DEV" : "PROD")})");
            GravarLog("");

            composicao.TotalComDesconto = Math.Round(composicao.TotalComDesconto, 2);

            if (PossuiRegraNfe(nfeRegras, "SEMALIQUOTA"))
            {
                GravarLog("R1: POSSUI REGRA 'SEMALIQUOTA'");

                AliquotaIss = 0;
            }
            else if (PossuiRegraNfe(nfeRegras, "CODTRIBMUN_0000"))
            {
                GravarLog("R2: POSSUI REGRA 'CODTRIBMUN_0000'");

                CnaeListaServicoParametroMunicipio.CodigoTributarioMunicipio = "0000";
            }
            else if (clienteDeposito.AliquotaIss > 0)
            {
                GravarLog($"R3: CLIDEP POSSUI ALIQUOTA ISS > 0: {clienteDeposito.AliquotaIss}");

                AliquotaIss = clienteDeposito.AliquotaIss;
            }
            else
            {
                GravarLog($"R4: CNAE LISTA SERVICO PARAMETRO MUNICIPIO ALIQUOTA ISS: {CnaeListaServicoParametroMunicipio.AliquotaIss.Value}");

                AliquotaIss = CnaeListaServicoParametroMunicipio.AliquotaIss.Value;
            }

            if (composicao.FlagEnviarValorIss == 'S')
            {
                GravarLog("R5: POSSUI FLAG ENVIAR VALOR ISS");

                if (clienteDeposito.FlagValorIssIgualProdutoBaseCalculoAliquota == 'S')
                {
                    GravarLog("R5.1: POSSUI FLAG VALOR ISS IGUAL PRODUTO BASE CALCULO ALIQUOTA:");
                    GravarLog("    ValorIss: (Composição * AliquotaIss) / 100");
                    GravarLog($"    ValorIss: {(composicao.TotalComDesconto * AliquotaIss) / 100}");

                    valorIss = (composicao.TotalComDesconto * AliquotaIss) / 100;
                }
                else
                {
                    GravarLog($"R5.2: AliquotaIss / 100 = {AliquotaIss / 100}");
                    GravarLog("    ValorIss = AliquotaIss / 100:");
                    GravarLog($"    ValorIss = {AliquotaIss / 100}");

                    valorIss = AliquotaIss / 100;
                }
            }

            if (PossuiRegraNfe(nfeRegras, "VALOR_ISS_TRUNCAR"))
            {
                GravarLog("R6: POSSUI REGRA 'VALOR_ISS_TRUNCAR'");

                GravarLog($"    ValorIss = {Math.Truncate(100 * valorIss) / 100}");

                valorIss = Math.Truncate(100 * valorIss) / 100;
            }

            //else
            //{
            //    var regra = nfeRegras.Where(w => w.RegraCodigo.Equals("VLSERVICO=TOTAL+IMP") && w.Ativo == 1)
            //        .FirstOrDefault();

            //    if (regra != null)
            //    {
            //        valorServicos = Math.Round(composicao.TotalComDesconto + valorIss, 2).ToString().Replace(",", ".");
            //    }
            //    else
            //    {
            //        valorServicos = Math.Round(composicao.TotalComDesconto, 2).ToString().Replace(",", ".");
            //    }
            //}

            string valorServicos;

            if (isDev)
            {
                valorServicos = "1";
            }
            else
            {
                valorServicos = composicao.TotalComDesconto.ToString().Replace(",", ".");
            }

            string baseCalculo = string.Empty;

            if (PossuiRegraNfe(nfeRegras, "BASE_CALCULO"))
            {
                GravarLog("R7: POSSUI REGRA 'BASE_CALCULO'");

                GravarLog("R7.1: baseCalculo = valorServicos");
                GravarLog($"      baseCalculo = {valorServicos}");

                baseCalculo = valorServicos;
            }

            GravarLog($"F1: COMPOSIÇÃO DO FATURAMENTO (ARREDONDAMENTO EM DUAS CASAS DECIMAIS): {composicao.TotalComDesconto} >>> {Math.Round(composicao.TotalComDesconto, 2)}");

            GravarLog($"F2: ALÍQUOTA ISS (ARREDONDAMENTO EM DUAS CASAS DECIMAIS): {string.Format("{0:N2}", AliquotaIss).Replace(",", ".")}");

            GravarLog($"F3: DISCRIMINAÇÃO: {descricaoConfiguracaoNfe + " CONFORME PROCESSO " + grv.NumeroFormularioGrv}");

            GravarLog($"F4: CÓDIGO CNAE: {composicao.Cnae}");

            GravarLog($"F5: ITEM DA LISTA SERVIÇO: {CnaeListaServicoParametroMunicipio.ListaServico}");

            GravarLog($"F6: VALOR ISS (ARREDONDAMENTO EM DUAS CASAS DECIMAIS): {string.Format("{0:N2}", valorIss).Replace(",", ".")}");

            GravarLog($"F7: CÓDIGO TRIBUTÁRIO MUNICÍPIO: {(!string.IsNullOrWhiteSpace(CnaeListaServicoParametroMunicipio.CodigoTributarioMunicipio) ? CnaeListaServicoParametroMunicipio.CodigoTributarioMunicipio : "CNAE + LISTASERVICO NÃO ASSOCIADO AO MUNICÍPIO")}");

            GravarLog($"F8: VALOR DOS SERVIÇOS: {valorServicos}. 1 SE FOR AMBIENTE DE DESENVOLVIMENTO");

            GravarLog($"F9: BASE DE CÁLCULO: {(!string.IsNullOrWhiteSpace(baseCalculo) ? baseCalculo : "CLIDEP NÃO POSSUI A REGRA 'BASE_CALCULO'")}");

            return(new Servico
            {
                aliquota = string.Format("{0:N2}", AliquotaIss).Replace(",", "."),

                discriminacao = descricaoConfiguracaoNfe + " CONFORME PROCESSO " + grv.NumeroFormularioGrv,

                iss_retido = "false",

                codigo_cnae = composicao.Cnae,

                item_lista_servico = CnaeListaServicoParametroMunicipio.ListaServico,

                valor_iss = string.Format("{0:N2}", valorIss).Replace(",", "."),

                codigo_tributario_municipio = CnaeListaServicoParametroMunicipio.CodigoTributarioMunicipio,

                valor_servicos = valorServicos,

                base_calculo = !string.IsNullOrWhiteSpace(baseCalculo) ? baseCalculo : null,
            });
        }
        public CnaeListaServicoParametroMunicipioEntity Selecionar(CnaeListaServicoParametroMunicipioEntity model)
        {
            var list = Listar(model);

            return(list?.FirstOrDefault());
        }