Пример #1
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,
            });
        }
Пример #2
0
        private Autorizacao Autorizar(GrvEntity grv, DepositoEntity deposito, ClienteDepositoEntity clienteDeposito, List <NfeRegraEntity> nfeRegras, EmpresaEntity empresa, AtendimentoEntity atendimento, NfeViewFaturamentoComposicaoAgrupadoEntity composicao, string descricaoConfiguracaoNfe, bool isDev)
        {
            var now = DateTime.Now.AddHours(-1);

            var Autorizacao = new Autorizacao
            {
                data_emissao = now.ToString("yyyy-MM-dd") + "T" + now.ToString("HH:mm:ss"),

                natureza_operacao = "1",

                optante_simples_nacional = empresa.OptanteSimplesNacional.Equals('S') ? "true" : "false",

                prestador = Prestador(empresa, composicao.FlagEnviarInscricaoEstadual),

                tomador = Tomador(deposito, atendimento)
            };

            Autorizacao.servico = Servico(grv, composicao, Autorizacao.prestador, clienteDeposito, nfeRegras, descricaoConfiguracaoNfe, isDev);

            return(Autorizacao);
        }