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, }); }
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); }