WebFoPag ~26 min

🛠️ Documentação Técnica: Tabela de Imposto de Renda

[!NOTE] Documentação Gerada Automaticamente O conteúdo abaixo foi gerado por IA através de engenharia reversa do código-fonte e deve ser validado.

Aprofundando a análise, temos as seguintes informações:

1. Visão Geral

  • Propósito da tela: A tela ImpostoRendaLista.aspx tem como objetivo principal exibir e gerenciar as tabelas de Imposto de Renda (IR) e Imposto de Renda sobre Participação nos Lucros e Resultados (IR-PLR). Ela permite a visualização das faixas de alíquotas e valores de dedução para cada período de vigência.
  • Contexto no sistema: Esta tela faz parte do módulo WebFoPag, que lida com funcionalidades relacionadas à folha de pagamento. Ela é crucial para a configuração e consulta das regras de cálculo de imposto de renda.
  • Usuários que utilizam: Usuários com permissão de “Visualizar Imposto de Renda” (conforme verificado no método Inicializar do code-behind). Provavelmente, são usuários do departamento de RH ou contabilidade que precisam consultar e validar as tabelas de IR.

2. Tipos/Modalidades A tela apresenta duas modalidades principais de Imposto de Renda:

  • Imposto de Renda (IR) convencional: Exibido no dlImpostoRenda, com faixas de vigência e alíquotas.
  • Imposto de Renda sobre PLR (IR-PLR): Exibido no dlImpostoRendaPLR, com suas próprias faixas de vigência e alíquotas, recuperadas de um serviço externo (ServiceSupercalcAPIClient).

3. Interface — Campos e Controles

NomeTipoObrigatórioRegra
lblTituloEmployer:Label⚪ NãoTítulo da seção de Imposto de Renda: “Imposto de Renda”
pnlImpostoRendaasp:Panel⚪ NãoPainel que agrupa os controles relacionados ao Imposto de Renda convencional.
upnImpostoRendaasp:UpdatePanel⚪ NãoAtualiza a seção de Imposto de Renda sem recarregar a página.
dlImpostoRendaasp:DataList⚪ NãoExibe a lista de tabelas de Imposto de Renda.
btlDtInicioVigenciaasp:LinkButton⚪ NãoBotão para ordenar a lista de Imposto de Renda pela “Data Início Vigência”.
btlDtFimVigenciaasp:LinkButton⚪ NãoBotão para ordenar a lista de Imposto de Renda pela “Data Fim Vigência”.
btiVisualizarSalarioasp:ImageButton⚪ NãoBotão para visualizar as faixas de Imposto de Renda de uma tabela específica.
btlTabelaVigenteasp:LinkButton⚪ NãoCampo oculto que indica se a tabela de IR é a vigente (valor “1”).
pnlFaixaImpostoRendaasp:Panel⚪ NãoPainel que exibe o gvFaixaImpostoRenda (visibilidade controlada).
gvFaixaImpostoRendaasp:GridView⚪ NãoExibe as faixas de Imposto de Renda de uma tabela selecionada. Colunas: “Valor inicial”, “Valor limite”, “Alíquota”, “Parcela a deduzir”, “Dedução por dependente”.
lblTituloPLREmployer:Label⚪ NãoTítulo da seção de Imposto de Renda PLR: “Imposto de Renda - PLR”
pnlImpostoRendaPLRasp:Panel⚪ NãoPainel que agrupa os controles relacionados ao Imposto de Renda PLR.
upnImpostoRendaPLRasp:UpdatePanel⚪ NãoAtualiza a seção de Imposto de Renda PLR sem recarregar a página.
dlImpostoRendaPLRasp:DataList⚪ NãoExibe a lista de tabelas de Imposto de Renda PLR.
lbtDataInicioVigenciaPLRasp:LinkButton⚪ NãoBotão para ordenar a lista de Imposto de Renda PLR pela “Data Início Vigência”.
lbtDataFimVigenciaPLRasp:LinkButton⚪ NãoBotão para ordenar a lista de Imposto de Renda PLR pela “Data Fim Vigência”.
imbVisualizarSalarioPLRasp:ImageButton⚪ NãoBotão para visualizar as faixas de Imposto de Renda PLR de uma tabela específica.
lbtTabelaVigentePLRasp:LinkButton⚪ NãoCampo oculto que indica se a tabela de IR PLR é a vigente.
pnlFaixaImpostoRendaPLRasp:Panel⚪ NãoPainel que exibe o gdvFaixaImpostoRendaPLR (visibilidade controlada).
gdvFaixaImpostoRendaPLRasp:GridView⚪ NãoExibe as faixas de Imposto de Renda PLR de uma tabela selecionada. Colunas: “Valor Inicial”, “Valor Limite”, “Alíquota”, “Parcela a deduzir”, “Dedução por dependente”.
uc1:PaginacaoUserControl⚪ NãoControle de paginação para o dlImpostoRenda.
uc2:TamanhoPaginaGridUserControl⚪ NãoControle para definir o tamanho da página do dlImpostoRenda.

4. Abas e Seções A tela é dividida em duas seções principais, cada uma com seu próprio painel e DataList:

  • Imposto de Renda: Contida no pnlImpostoRenda, exibe as tabelas de IR convencional.
  • Imposto de Renda - PLR: Contida no pnlImpostoRendaPLR, exibe as tabelas de IR sobre PLR.

5. Regras de Negócio

🛡️ 5. Regras de Negócio

5.1. Validações de Campos

  • Permissão de Visualização: O usuário deve possuir a permissão Enumeradores.Permissoes.ImpostoDeRenda.VisualizarImpostoDeRenda para acessar a tela. Caso contrário, é redirecionado para a página de acesso negado. (Origem: ImpostoRendaLista.aspx.cs, método Inicializar)
  • Entrada de Página (uc1:Paginacao): O valor digitado no campo de texto para “Ir para página” (txtNovaPagina) deve ser um número inteiro válido. Se não for, a ação de atualização da página não é executada. (Origem: Paginacao.ascx.cs, método btnAtualizarPagina_Click)

5.2. Regras de Habilitação/Desabilitação e Visibilidade

  • Expansão de Faixas de IR: O painel pnlFaixaImpostoRenda (e o gvFaixaImpostoRenda) é visível apenas quando o usuário clica no botão de visualizar de uma tabela de Imposto de Renda. Se a tabela for a vigente (btlTabelaVigente com valor “1”), o painel é expandido automaticamente na inicialização da tela. (Origem: ImpostoRendaLista.aspx.cs, métodos Inicializar, dlImpostoRenda_EditCommand, Expandir_dlImpostoRenda)
  • Expansão de Faixas de IR PLR: O painel pnlFaixaImpostoRendaPLR (e o gdvFaixaImpostoRendaPLR) é visível apenas quando o usuário clica no botão de visualizar de uma tabela de Imposto de Renda PLR. Se a data de início de vigência da tabela for do ano corrente, o painel é expandido automaticamente na inicialização da tela. (Origem: ImpostoRendaLista.aspx.cs, métodos Inicializar, dlImpostoRendaPLR_EditCommand, ExpandirPLR_dlImpostoRenda)
  • Botões de Paginação (uc1:Paginacao):
  • Se TotalResultados for 0, todos os botões de navegação (btiPrimeira, btiAnterior, btiProxima, btiUltima), o campo txtNovaPagina e o botão btnAtualizarPagina são desabilitados.
  • Se PaginaCorrente for 1: btiPrimeira e btiAnterior são desabilitados. Se TotalPaginas for maior que 1, txtNovaPagina, btnAtualizarPagina, btiProxima e btiUltima são habilitados. Caso contrário, são desabilitados.
  • Se PaginaCorrente for igual a TotalPaginas: txtNovaPagina, btnAtualizarPagina, btiPrimeira e btiAnterior são habilitados. btiProxima e btiUltima são desabilitados.
  • Em outros casos (páginas intermediárias): todos os botões de navegação, txtNovaPagina e btnAtualizarPagina são habilitados. (Origem: Paginacao.ascx.cs, método AjustarBotoesPaginacao)
  • Dropdown de Tamanho da Página (uc2:TamanhoPaginaGrid): A visibilidade do dropdown (ddlTamanhoPagina) e dos rótulos (lblTextoParte1, lblTextoParte2) pode ser controlada pela propriedade EsconderSelecao. Se EsconderSelecao for true, os componentes ficam invisíveis. (Origem: TamanhoPaginaGrid.ascx.cs, propriedade EsconderSelecao)

5.3. Regras de Inativação e Exclusão

  • Exclusão de FaixaImpostoRenda: É possível excluir uma faixa de imposto de renda individualmente (Delete(int idFaixaImpostoRenda)) ou em lote (Delete(List<int> idFaixaImpostoRenda)). A exclusão em lote constrói uma cláusula IN na query SQL. (Origem: FaixaImpostoRenda_P1.cs, métodos Delete)
  • Exclusão de ImpostoRenda: É possível excluir uma tabela de imposto de renda individualmente (Delete(int idImpostoRenda)) ou em lote (Delete(List<int> idImpostoRenda)). A exclusão em lote constrói uma cláusula IN na query SQL. (Origem: ImpostoRenda_P1.cs, métodos Delete)

5.4. Regras de Salvar e Fluxo de Configuração

  • Persistência de FaixaImpostoRenda: O método Save() de FaixaImpostoRenda decide se deve inserir (Insert()) ou atualizar (Update()) um registro com base na propriedade _persisted. A data de cadastro (Dta_Cadastro) é definida apenas na inserção, enquanto a data de alteração (Dta_Alteracao) é atualizada em ambas as operações. (Origem: FaixaImpostoRenda_P1.cs, métodos Save, Insert, Update)
  • Persistência de ImpostoRenda: O método Save() de ImpostoRenda decide se deve inserir (Insert()) ou atualizar (Update()) um registro com base na propriedade _persisted. A data de cadastro (Dta_Cadastro) é definida apenas na inserção, enquanto a data de alteração (Dta_Alteracao) é atualizada em ambas as operações. (Origem: ImpostoRenda_P1.cs, métodos Save, Insert, Update)

5.5. Outras Regras Específicas da Tela

  • Ordenação da Lista de IR: A lista de Imposto de Renda convencional (dlImpostoRenda) é ordenada pela coluna especificada (ColunaOrdenacao) e direção (DirecaoOrdenacao), que alternam entre “Asc” e “Desc” a cada clique nos botões de cabeçalho. (Origem: ImpostoRendaLista.aspx.cs, métodos btlDtInicioVigencia_Click, btlDtFimVigencia_Click)
  • Ordenação da Lista de IR PLR: A lista de Imposto de Renda PLR (dlImpostoRendaPLR) é ordenada pela coluna especificada (ColunaOrdenacaoPLR) e direção (DirecaoOrdenacaoPLR), que alternam entre “Asc” e “Desc” a cada clique nos botões de cabeçalho. (Origem: ImpostoRendaLista.aspx.cs, métodos lbtDataInicioVigenciaPLR_OnClick, lbtDataFimVigenciaPLR_OnClick)
  • Recuperação de Faixas de IR PLR: As faixas de Imposto de Renda PLR são obtidas através de uma chamada ao serviço externo ServiceSupercalcAPIClient.RecuperarFaixasIRRFPLR(), que retorna uma string XML. Essa string é então desserializada para um DataTable e armazenada em dtPLR. (Origem: ImpostoRendaLista.aspx.cs, método CarregarDataListPLR)
  • Cálculo de Paginação (uc1:Paginacao): O TotalPaginas é calculado dividindo TotalResultados por TamanhoPagina. Se houver resto na divisão, TotalPaginas é incrementado em 1. Se a PaginaCorrente for maior que TotalPaginas (e TotalPaginas não for zero), a PaginaCorrente é resetada para 1 e o evento MudaPagina é invocado. (Origem: Paginacao.ascx.cs, método AjustarPaginacao)

🔄 6. Fluxos Principais

  • Inicialização da Tela (Page_Load):
  1. Define o título da página como “ImpostoRendaLista”.
  2. Se não for um postback, chama o método Inicializar().
  • Método Inicializar():
  1. Carrega as permissões do usuário logado para a categoria Enumeradores.CategoriaPermissao.ImpostoRenda usando Usuario.CarregarPermissoes(new Usuario(base.CodigoUsuarioLogado), Enumeradores.CategoriaPermissao.ImpostoRenda).
  2. Verifica se o usuário tem a permissão Enumeradores.Permissoes.ImpostoDeRenda.VisualizarImpostoDeRenda. Se não tiver, redireciona para Configuracao.UrlAcessoNegado.
  3. Define as propriedades ColunaOrdenacao como “Dta_Inicio_Vigencia” e DirecaoOrdenacao como “DESC” para o IR convencional.
  4. Define as propriedades ColunaOrdenacaoPLR como “DataInicioVigencia” e DirecaoOrdenacaoPLR como “DESC” para o IR PLR.
  5. Chama CarregarDataList() para popular o dlImpostoRenda.
  6. Chama CarregarDataListPLR() para popular o dlImpostoRendaPLR.
  7. Itera sobre os itens do dlImpostoRenda: se btlTabelaVigente.Text for “1”, chama Expandir_dlImpostoRenda para expandir o painel de faixas de IR.
  8. Itera sobre os itens do dlImpostoRendaPLR: se a data de início de vigência for do ano corrente, chama ExpandirPLR_dlImpostoRenda para expandir o painel de faixas de IR PLR.
  • Carregamento da Lista de IR (CarregarDataList):
  1. Define o DataSource do dlImpostoRenda chamando ImpostoRenda.Listar(ColunaOrdenacao, DirecaoOrdenacao).
  2. Chama dlImpostoRenda.DataBind().
  • Carregamento da Lista de IR PLR (CarregarDataListPLR):
  1. Instancia SuperCalcAPIWeb.ServiceSupercalcAPIClient.
  2. Chama obj.RecuperarFaixasIRRFPLR() para obter os dados do serviço externo.
  3. Desserializa o XML retornado para um DataTable (dtPLR).
  4. Cria um DataView de dtPLR e aplica a ordenação com base em ColunaOrdenacaoPLR e DirecaoOrdenacaoPLR.
  5. Filtra os dados para obter apenas os valores distintos de Idf_TabelaIRRFPLR, DataInicioVigencia e DataFimVigencia.
  6. Define o DataSource do dlImpostoRendaPLR com os dados filtrados.
  7. Chama dlImpostoRendaPLR.DataBind().
  • Ordenação da Lista de IR (btlDtInicioVigencia_Click, btlDtFimVigencia_Click):
  1. Inverte a DirecaoOrdenacao (ASC/DESC) se a coluna clicada for a mesma da ordenação atual.
  2. Define a ColunaOrdenacao com base no LinkButton clicado.
  3. Chama CarregarDataList().
  • Ordenação da Lista de IR PLR (lbtDataInicioVigenciaPLR_OnClick, lbtDataFimVigenciaPLR_OnClick):
  1. Inverte a DirecaoOrdenacaoPLR (ASC/DESC) se a coluna clicada for a mesma da ordenação atual.
  2. Define a ColunaOrdenacaoPLR com base no LinkButton clicado.
  3. Chama CarregarDataListPLR().
  • Visualização das Faixas de IR (dlImpostoRenda_EditCommand, Expandir_dlImpostoRenda):
  1. Recupera o GridView (gvFaixaImpostoRenda) e o Panel (pnlFaixaImpostoRenda) do item clicado.
  2. Se o painel não estiver visível, chama UIHelper.CarregarGridView(grid, FaixaImpostoRenda.ListarPorImpostoRenda(idImpostoRenda)) para popular o GridView e torna o painel visível.
  3. Se o painel estiver visível, limpa o GridView e torna o painel invisível.
  • Visualização das Faixas de IR PLR (dlImpostoRendaPLR_EditCommand, ExpandirPLR_dlImpostoRenda):
  1. Recupera o GridView (gdvFaixaImpostoRendaPLR) e o Panel (pnlFaixaImpostoRendaPLR) do item clicado.
  2. Se o painel não estiver visível, filtra o dtPLR pelo idImpostoRenda e chama UIHelper.CarregarGridView para popular o GridView e torna o painel visível.
  3. Se o painel estiver visível, limpa o GridView e torna o painel invisível.
  • Eventos de Paginação (uc1:Paginacao):
  1. ucPaginacao_MudarPagina(): Chama CarregarDataList().
  2. ucTamanhoPaginaGrid_MudarTamanhoPagina(): Chama CarregarDataList().

🔌 7. Integrações e Dependências

7.1. Classes BLL e Service utilizadas

  • Employer.Plataforma.BLL.WebFoPag.FaixaImpostoRenda

  • Arquivos de Origem: Employer.Plataforma.BLL.WebFoPag\FaixaImpostoRenda_P1.cs, Employer.Plataforma.BLL.WebFoPag\FaixaImpostoRenda_P2.cs

  • Propósito: Gerencia as faixas de imposto de renda.

  • Métodos Relevantes:

  • ListarPorImpostoRenda(int idImpostoRenda): Retorna um IDataReader com as faixas de imposto de renda para um determinado idImpostoRenda. Internamente, executa uma consulta SQL inline (SPSELECT) que filtra por Idf_Imposto_Renda.

  • Listar(ImpostoRenda objImpostoRenda): Retorna uma List<FaixaImpostoRenda> para um determinado objeto ImpostoRenda. Internamente, chama ListarPorImpostoRenda.

  • ListarFaixaIRRF(PeriodoCalculo objPeriodoCalculo): Retorna uma List<FaixaImpostoRenda> para um período de cálculo específico. Executa uma consulta SQL inline (SPSELECTFIR) que busca faixas de IR vigentes para o período.

  • ListarTodos(): Retorna um Dictionary<int, FaixaImpostoRenda> com todas as faixas de imposto de renda. Executa uma consulta SQL inline (SPSELECTFIR).

  • Save(), Insert(), Update(), Delete(): Métodos para persistência de dados (CRUD) da entidade FaixaImpostoRenda.

  • Employer.Plataforma.BLL.WebFoPag.ImpostoRenda

  • Arquivos de Origem: Employer.Plataforma.BLL.WebFoPag\ImpostoRenda_P1.cs, Employer.Plataforma.BLL.WebFoPag\ImpostoRenda_P2.cs

  • Propósito: Gerencia as tabelas de imposto de renda.

  • Métodos Relevantes:

  • Listar(string nomeColuna, string direcaoOrdenacao): Retorna um DataTable com as tabelas de imposto de renda, ordenadas pela coluna e direção especificadas. Inclui uma coluna vigente que indica se a tabela está ativa na data atual. Internamente, executa uma consulta SQL inline.

  • Listar(): Retorna uma List<ImpostoRenda> com todas as tabelas de imposto de renda, incluindo suas faixas de IR (FaixasIR) e o valor de dedução por dependente (ValorDeducaoDependenteIR). Internamente, chama FaixaImpostoRenda.Listar(objIRRF) e DependenteImpostoRenda.RecuperarValorDeducaoAtivo.

  • ListarTodos(): Retorna um Dictionary<int, ImpostoRenda> com todas as tabelas de imposto de renda.

  • Save(), Insert(), Update(), Delete(): Métodos para persistência de dados (CRUD) da entidade ImpostoRenda.

  • Employer.Plataforma.Web.Code.UIHelper

  • Arquivo de Origem: C:\Webfopag\Etec.WebFopag\Employer.Plataforma.Web.Code\UIHelper.cs

  • Propósito: Classe utilitária para operações comuns de UI, como carregar GridViews e DataLists.

  • Métodos Relevantes:

  • CarregarGridView(GridView gv, IDataReader dataSource): Popula um GridView com dados de um IDataReader.

  • CarregarGridView(GridView gv, DataTable dataSource): Popula um GridView com dados de um DataTable.

  • Employer.Plataforma.BLL.Usuario

  • Arquivos de Origem: C:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P1.cs, C:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P2.cs

  • Propósito: Gerencia informações e permissões de usuários.

  • Métodos Relevantes:

  • CarregarPermissoes(Usuario usuario, Enumeradores.CategoriaPermissao categoriaPermissao): Retorna uma lista de IDs de permissões que o usuário possui para uma determinada categoria de permissão. Internamente, executa a stored procedure SPSELECTPERMISSOESUSUARIO.

7.2. Stored Procedures chamadas

  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: INSERT INTO FLH_Faixa_Imposto_Renda (...) VALUES (...)
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: @Idf_Imposto_Renda, @Vlr_Inicial, @Vlr_Final, @Vlr_Aliquota, @Vlr_Parcela_Deduzir, @Vlr_Deducao_Dependente, @Flg_Inativo, @Dta_Cadastro, @Dta_Alteracao
  • Propósito: Insere um novo registro na tabela FLH_Faixa_Imposto_Renda.
  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: UPDATE FLH_Faixa_Imposto_Renda SET ... WHERE Idf_Faixa_Imposto_Renda = @Idf_Faixa_Imposto_Renda
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: @Idf_Imposto_Renda, @Vlr_Inicial, @Vlr_Final, @Vlr_Aliquota, @Vlr_Parcela_Deduzir, @Vlr_Deducao_Dependente, @Flg_Inativo, @Dta_Cadastro, @Dta_Alteracao, @Idf_Faixa_Imposto_Renda
  • Propósito: Atualiza um registro existente na tabela FLH_Faixa_Imposto_Renda.
  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: DELETE FROM FLH_Faixa_Imposto_Renda WHERE Idf_Faixa_Imposto_Renda = @Idf_Faixa_Imposto_Renda
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: @Idf_Faixa_Imposto_Renda
  • Propósito: Exclui um registro da tabela FLH_Faixa_Imposto_Renda.
  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: delete from FLH_Faixa_Imposto_Renda where Idf_Faixa_Imposto_Renda in (...)
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: @parm0, @parm1, … (lista dinâmica de IDs)
  • Propósito: Exclui múltiplos registros da tabela FLH_Faixa_Imposto_Renda.
  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: SELECT * FROM FLH_Faixa_Imposto_Renda WHERE Idf_Faixa_Imposto_Renda = @Idf_Faixa_Imposto_Renda
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: @Idf_Faixa_Imposto_Renda
  • Propósito: Recupera um registro específico da tabela FLH_Faixa_Imposto_Renda.
  • SQL inline (FaixaImpostoRenda_P1.cs)
  • Nome: SELECT ROW_NUMBER() OVER (ORDER BY {colunaOrdenacao} {direcaoOrdenacao}) AS RowID, Fai.Idf_Faixa_Imposto_Renda, ... FROM FLH_Faixa_Imposto_Renda Fai
  • Arquivo BLL: FaixaImpostoRenda_P1.cs
  • Parâmetros: colunaOrdenacao, direcaoOrdenacao (concatenados na string SQL)
  • Propósito: Retorna um conjunto de faixas de imposto de renda com paginação e ordenação.
  • SPSELECT (FaixaImpostoRenda_P2.cs)
  • Nome: DECLARE @sql varchar(8000) SET @sql = ' SELECT Fai.Idf_Faixa_Imposto_Renda, Fai.Idf_Imposto_Renda, Fai.Vlr_Inicial, Fai.Vlr_Final, Fai.Vlr_Aliquota, Fai.Vlr_Parcela_Deduzir, Fai.Vlr_Deducao_Dependente, Fai.Flg_Inativo, Fai.Dta_Cadastro, Fai.Dta_Alteracao FROM plataforma.FLH_Faixa_Imposto_Renda Fai WHERE 1 = 1' IF (@Idf_Imposto_Renda IS NOT NULL) SET @sql = @sql + ' AND Fai.Idf_Imposto_Renda = ' + CONVERT(VARCHAR,@Idf_Imposto_Renda) PRINT(@sql) EXECUTE(@sql)
  • Arquivo BLL: FaixaImpostoRenda_P2.cs
  • Parâmetros: @Idf_Imposto_Renda
  • Propósito: Seleciona faixas de imposto de renda da tabela plataforma.FLH_Faixa_Imposto_Renda, filtrando opcionalmente por Idf_Imposto_Renda.
  • SPSELECTFIR (FaixaImpostoRenda_P2.cs)
  • Nome: DECLARE @datainicio DATETIME; DECLARE @datafim DATETIME; select @datainicio = Dta_Inicio, @datafim = Dta_Fim from TAB_Periodo_Calculo (nolock) where Idf_Periodo_Calculo = @idf_periodo_calculo; select fir.Idf_Faixa_Imposto_Renda, fir.Idf_Imposto_Renda, fir.Vlr_Inicial, fir.Vlr_Final, fir.Vlr_Aliquota, fir.Vlr_Parcela_Deduzir, fir.Vlr_Deducao_Dependente, fir.Flg_Inativo, fir.Dta_Cadastro, fir.Dta_Alteracao FROM plataforma.FLH_Faixa_Imposto_Renda fir (nolock) INNER JOIN plataforma.FLH_Imposto_Renda ir (nolock) ON ir.Idf_Imposto_Renda = fir.Idf_Imposto_Renda where isnull((SELECT 1 FROM plataforma.FLH_Imposto_Renda irTab (nolock) WHERE irTab.Idf_Imposto_Renda = ir.Idf_Imposto_Renda AND ir.Dta_Inicio_Vigencia <= @datainicio AND ( ir.Dta_Fim_Vigencia >= @datafim OR ir.Dta_Fim_Vigencia IS NULL )),0) = 1 order by Vlr_Inicial
  • Arquivo BLL: FaixaImpostoRenda_P2.cs
  • Parâmetros: @Idf_Periodo_Calculo
  • Propósito: Seleciona faixas de imposto de renda que são vigentes para um determinado período de cálculo.
  • SQL inline (FaixaImpostoRenda_P2.cs)
  • Nome: select fir.Idf_Faixa_Imposto_Renda, fir.Idf_Imposto_Renda, fir.Vlr_Inicial, fir.Vlr_Final, fir.Vlr_Aliquota, fir.Vlr_Parcela_Deduzir, fir.Vlr_Deducao_Dependente, fir.Flg_Inativo, fir.Dta_Cadastro, fir.Dta_Alteracao FROM plataforma.FLH_Faixa_Imposto_Renda fir (nolock) INNER JOIN plataforma.FLH_Imposto_Renda ir (nolock) ON ir.Idf_Imposto_Renda = fir.Idf_Imposto_Renda
  • Arquivo BLL: FaixaImpostoRenda_P2.cs
  • Parâmetros: Nenhum
  • Propósito: Retorna todas as faixas de imposto de renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: INSERT INTO plataforma.FLH_Imposto_Renda (Dta_Inicio_Vigencia, Dta_Fim_Vigencia, Vlr_Minimo_Retencao, Sta_Imposto_Renda, Flg_Inativo, Dta_Cadastro, Dta_Alteracao) VALUES (@Dta_Inicio_Vigencia, @Dta_Fim_Vigencia, @Vlr_Minimo_Retencao, @Sta_Imposto_Renda, @Flg_Inativo, @Dta_Cadastro, @Dta_Alteracao);SET @Idf_Imposto_Renda = @@IDENTITY;
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: @Dta_Inicio_Vigencia, @Dta_Fim_Vigencia, @Vlr_Minimo_Retencao, @Sta_Imposto_Renda, @Flg_Inativo, @Dta_Cadastro, @Dta_Alteracao
  • Propósito: Insere um novo registro na tabela plataforma.FLH_Imposto_Renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: UPDATE plataforma.FLH_Imposto_Renda SET Dta_Inicio_Vigencia = @Dta_Inicio_Vigencia, Dta_Fim_Vigencia = @Dta_Fim_Vigencia, Vlr_Minimo_Retencao = @Vlr_Minimo_Retencao, Sta_Imposto_Renda = @Sta_Imposto_Renda, Flg_Inativo = @Flg_Inativo, Dta_Cadastro = @Dta_Cadastro, Dta_Alteracao = @Dta_Alteracao WHERE Idf_Imposto_Renda = @Idf_Imposto_Renda
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: @Dta_Inicio_Vigencia, @Dta_Fim_Vigencia, @Vlr_Minimo_Retencao, @Sta_Imposto_Renda, @Flg_Inativo, @Dta_Cadastro, @Dta_Alteracao, @Idf_Imposto_Renda
  • Propósito: Atualiza um registro existente na tabela plataforma.FLH_Imposto_Renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: DELETE FROM plataforma.FLH_Imposto_Renda WHERE Idf_Imposto_Renda = @Idf_Imposto_Renda
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: @Idf_Imposto_Renda
  • Propósito: Exclui um registro da tabela plataforma.FLH_Imposto_Renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: delete from FLH_Imposto_Renda where Idf_Imposto_Renda in (...)
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: @parm0, @parm1, … (lista dinâmica de IDs)
  • Propósito: Exclui múltiplos registros da tabela plataforma.FLH_Imposto_Renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: SELECT * FROM plataforma.FLH_Imposto_Renda WHERE Idf_Imposto_Renda = @Idf_Imposto_Renda
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: @Idf_Imposto_Renda
  • Propósito: Recupera um registro específico da tabela plataforma.FLH_Imposto_Renda.
  • SQL inline (ImpostoRenda_P1.cs)
  • Nome: SELECT ROW_NUMBER() OVER (ORDER BY {colunaOrdenacao} {direcaoOrdenacao}) AS RowID, Imp.Idf_Imposto_Renda, ... FROM FLH_Imposto_Renda Imp
  • Arquivo BLL: ImpostoRenda_P1.cs
  • Parâmetros: colunaOrdenacao, direcaoOrdenacao (concatenados na string SQL)
  • Propósito: Retorna um conjunto de tabelas de imposto de renda com paginação e ordenação.
  • SPSELECTIRRF (ImpostoRenda_P2.cs)
  • Nome: Select * from plataforma.FLH_Imposto_Renda
  • Arquivo BLL: ImpostoRenda_P2.cs
  • Parâmetros: Nenhum
  • Propósito: Seleciona todas as tabelas de imposto de renda.
  • SQL inline (ImpostoRenda_P2.cs)
  • Nome: SELECT Imp.Idf_Imposto_Renda, Imp.Dta_Inicio_Vigencia, Imp.Dta_Fim_Vigencia, Imp.Vlr_Minimo_Retencao, Imp.Sta_Imposto_Renda, Imp.Flg_Inativo, Imp.Dta_Cadastro, Imp.Dta_Alteracao, isnull((SELECT 1 FROM plataforma.FLH_Imposto_Renda IR WHERE IR.Idf_Imposto_Renda = Imp.Idf_Imposto_Renda AND Imp.Dta_Inicio_Vigencia <= getdate() AND (Imp.Dta_Fim_Vigencia >= getdate() OR Imp.Dta_Fim_Vigencia IS NULL)),0) as vigente FROM plataforma.FLH_Imposto_Renda Imp ORDER BY {0} {1}
  • Arquivo BLL: ImpostoRenda_P2.cs
  • Parâmetros: {0} (nomeColuna), {1} (direcaoOrdenacao)
  • Propósito: Lista as tabelas de imposto de renda com indicação de vigência, ordenadas dinamicamente.
  • SPSELECTPERMISSOESUSUARIO (Usuario_P2.cs)
  • Nome: SELECT DISTINCT p.Idf_Permissao as Permissao FROM TAB_Periodo_Permissao pp INNER JOIN TAB_Perfil_Permissao p ON pp.Idf_Perfil = p.Idf_Perfil INNER JOIN plataforma.TAB_Permissao per ON p.Idf_Permissao = per.Idf_Permissao WHERE Idf_Usuario = @idf_usuario AND Dta_Inicio <= GETDATE() AND (Dta_Fim >= GETDATE() OR Dta_Fim IS NULL) AND per.Idf_Categoria_Permissao = @Idf_Categoria_Permissao
  • Arquivo BLL: Usuario_P2.cs
  • Parâmetros: @idf_usuario, @Idf_Categoria_Permissao
  • Propósito: Retorna as permissões ativas de um usuário em uma determinada categoria.

7.3. UserControls incluídos (.ascx)

  • UserControls/Paginacao.ascx

  • Caminho: C:\Webfopag\Etec.WebFopag\Employer.Plataforma.Web.WebFoPag\UserControls\Paginacao.ascx

  • ID: ucPaginacao (no .aspx.cs, referenciado como ucPaginacao e ucPaginacaoPLR para as duas listas)

  • Tag: uc1:Paginacao

  • Propriedades Expostas:

  • CssClass: Estilo CSS do painel de paginação.

  • TotalResultados: Número total de registros.

  • PaginaCorrente: Página atual sendo exibida.

  • TotalPaginas: Número total de páginas.

  • TamanhoPagina: Quantidade de itens por página.

  • Eventos:

  • MudaPagina: Disparado quando a página é alterada.

  • Métodos Públicos Chamados pela Tela Pai:

  • AjustarPaginacao(): Ajusta a exibição dos botões de navegação e o texto de estado da paginação.

  • LimparPaginacao(): Limpa o estado da paginação e desabilita os controles.

  • UserControls/TamanhoPaginaGrid.ascx

  • Caminho: C:\Webfopag\Etec.WebFopag\Employer.Plataforma.Web.WebFoPag\UserControls\TamanhoPaginaGrid.ascx

  • ID: ucTamanhoPaginaGrid (no .aspx.cs, referenciado como ucTamanhoPaginaGrid e ucTamanhoPaginaGridPLR para as duas listas)

  • Tag: uc2:TamanhoPaginaGrid

  • Propriedades Expostas:

  • TamanhoPagina: Retorna o tamanho da página selecionado no dropdown.

  • HabilitarDropDownList: Habilita/desabilita o dropdown.

  • EsconderSelecao: Controla a visibilidade do controle.

  • Eventos:

  • MudarTamanhoPagina: Disparado quando o tamanho da página é alterado.

  • Métodos Públicos Chamados pela Tela Pai: Nenhum método público é explicitamente chamado pela tela pai, mas o evento MudarTamanhoPagina é assinado.

7.4. WebServices, APIs externas, filas

  • SuperCalcAPIWeb.ServiceSupercalcAPIClient
  • Endpoint/Serviço: Um serviço web (WCF ou similar) para recuperar faixas de IRRF PLR. O cliente WCF é gerado a partir de uma referência de serviço.
  • Métodos Chamados: RecuperarFaixasIRRFPLR()
  • Propósito: Obtém os dados das faixas de Imposto de Renda PLR de um sistema externo.

8. Mensagens ao Usuário

  • “Exibindo página {0} de {1}” (uc1:Paginacao): Exibida no controle de paginação para indicar a página atual e o total de páginas.
  • “Exibindo página 0 de 0” (uc1:Paginacao): Exibida quando não há resultados.
  • “Sem itens” (gvFaixaImpostoRenda, gdvFaixaImpostoRendaPLR): Exibida nos GridViews quando não há faixas de imposto de renda para mostrar.

9. Permissões e Perfis

  • Enumeradores.Permissoes.ImpostoDeRenda.VisualizarImpostoDeRenda: Controla o acesso à tela. Se o usuário não possuir esta permissão, ele é redirecionado para a página de acesso negado. (Origem: ImpostoRendaLista.aspx.cs, método Inicializar)

10. Aprofundamento — Detalhes Internos de Métodos

Employer.Plataforma.BLL.Usuario

Arquivos:

  • C:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P1.cs
  • C:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P2.cs

Métodos

MétodoAssinaturaPropósito
GetParametersprivate List<SqlParameter> GetParameters()Prepara uma lista de parâmetros SQL para operações de insert e update.
LoadDataReaderprivate static IDataReader LoadDataReader(int usuario)Retorna um IDataReader para um registro específico de Usuario.
LoadDataReaderprivate static IDataReader LoadDataReader(int usuario, SqlTransaction trans)Retorna um IDataReader para um registro específico de Usuario, dentro de uma transação.
LoadDataReaderpublic static IDataReader LoadDataReader(string colunaOrdenacao, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros)Retorna um IDataReader para uma consulta paginada e ordenada de usuários.
LoadObjectpublic static Usuario LoadObject(int usuario)Retorna uma instância de Usuario a partir do banco de dados.
LoadObjectpublic static Usuario LoadObject(int usuario, SqlTransaction trans)Retorna uma instância de Usuario a partir do banco de dados, dentro de uma transação.
CompleteObjectpublic bool CompleteObject()Completa os atributos da instância atual de Usuario com dados do banco.
CompleteObjectpublic bool CompleteObject(SqlTransaction trans)Completa os atributos da instância atual de Usuario com dados do banco, dentro de uma transação.
NumeroCPFFormatadopublic string NumeroCPFFormatado { get; }Retorna o CPF do usuário formatado (XXX.XXX.XXX-XX).
Salvarpublic void Salvar(PessoaFisica objPessoaFisica)Salva um usuário e sua pessoa física associada em uma transação.
Salvarpublic void Salvar(PessoaFisica objPessoaFisica, SqlTransaction trans)Salva um usuário e sua pessoa física associada dentro de uma transação existente.
SalvarAuditoriaprivate static void SalvarAuditoria(Usuario auditoria, SqlTransaction trans = null, bool ehDelete = false, AtividadeAuditoriaDTO atividade = null)Registra eventos de auditoria (insert, update, delete, inativação, ativação) para a entidade Usuario.
CompletarInformacoesAuditoriaprivate static void CompletarInformacoesAuditoria(Usuario usuario, Usuario atual = null, bool consultarDescricaoReferencia = true)Completa informações de auditoria para um objeto Usuario, incluindo dados de PessoaFisica e PerfilPrincipal.
Insertprivate void Insert()Insere uma nova instância de Usuario no banco de dados, incluindo a criação de UsuarioPerfil e PeriodoPermissao.
Insertprivate void Insert(SqlTransaction trans)Insere uma nova instância de Usuario no banco de dados, dentro de uma transação existente, incluindo a criação de UsuarioPerfil e PeriodoPermissao.
Savepublic void Save(bool auditar = true)Salva uma instância de Usuario (insere se for nova, atualiza se já existir), com opção de auditar.
Savepublic void Save(SqlTransaction trans)Salva uma instância de Usuario dentro de uma transação existente, com auditoria.
Deletepublic static void Delete(int usuario)Exclui um usuário pelo seu ID.
Deletepublic static void Delete(int usuario, SqlTransaction trans)Exclui um usuário pelo seu ID, dentro de uma transação existente.
Deletepublic static void Delete(List<Usuario> usuario)Exclui múltiplos usuários por uma lista de objetos Usuario.
Updateprivate void Update(bool auditar = true)Atualiza uma instância existente de Usuario no banco de dados, com opção de auditar.
Updateprivate void Update(SqlTransaction trans)Atualiza uma instância existente de Usuario no banco de dados, dentro de uma transação existente.
SetParametersprivate void SetParameters(List<SqlParameter> parms)Preenche uma lista de parâmetros SQL com os valores da instância atual de Usuario.
ExisteCPFpublic static Boolean ExisteCPF(decimal numCPF)Verifica se existe um usuário para o CPF informado.
RecuperarPorCPFpublic static Usuario RecuperarPorCPF(decimal numCPF)Retorna uma instância de Usuario a partir do banco de dados pelo CPF.
CarregarObjetoCPFpublic static Usuario CarregarObjetoCPF(string CPFUsuario)Retorna uma instância de Usuario a partir do banco de dados pelo CPF (string).
CarregarObjetoCPFpublic static bool CarregarObjetoCPF(string CPFUsuario, out Usuario objUsuario)Tenta carregar uma instância de Usuario a partir do banco de dados pelo CPF (string), retornando true se encontrado.
ListarPorCPFNomeParcialAutoCompletepublic static Dictionary<int, String> ListarPorCPFNomeParcialAutoComplete(string valor, int count)Lista usuários por CPF ou nome parcial para autocomplete.
CarregarPermissoespublic static List<int> CarregarPermissoes(Usuario usuario, Enumeradores.CategoriaPermissao categoria)Retorna uma lista de IDs de permissões que o usuário possui para uma determinada categoria de permissão.
RelatorioUsuarioSistemapublic static IList<RelatorioUsuarioSistemaDto> RelatorioUsuarioSistema(int? idUsuario, int? pInativo)Gera um relatório de usuários do sistema com base em filtros de ID e status de inatividade.
ListaAgrupamentoUsuariopublic static List<RelatorioUsuarioSistemaDto> ListaAgrupamentoUsuario(List<decimal> lsCpfUsuario)Retorna uma lista de DTOs de agrupamento de usuário com base em uma lista de CPFs.
FormataCelularprivate static string FormataCelular(DbDataReader dr)Formata o número de celular lido de um DbDataReader.
RetornaQuantidadeUsuariospublic static int RetornaQuantidadeUsuarios(bool? bInternos, bool bAtivos, SqlTransaction tran = null)Retorna a quantidade de usuários (internos/externos, ativos/inativos).
CarregarPermissoespublic static Dictionary<int, int> CarregarPermissoes(int _idfUsuario)Retorna um dicionário de permissões (Idf_Permissao, Idf_Categoria_Permissao) para um usuário.
TemPermissaopublic static bool TemPermissao(int IdfUsuario, Enum IdfPermissao, Enumeradores.Sistema sistema)Verifica se um usuário tem uma permissão específica em um sistema.
TemPermissaopublic static bool TemPermissao(int IdfUsuario, Enum IdfPermissao, Enumeradores.Sistema sistema, SqlTransaction tran)Verifica se um usuário tem uma permissão específica em um sistema, dentro de uma transação.
CarregarPermissoespublic static Dictionary<int, int> CarregarPermissoes(int IdfUsuario, Enumeradores.Sistema sistema)Retorna um dicionário de permissões (Idf_Permissao, Idf_Categoria_Permissao) para um usuário em um sistema.
ListarPorCodNomeParcialpublic static IDataReader ListarPorCodNomeParcial(string cpf, string nome)Lista usuários por CPF ou nome parcial.
ListarPerfilPorUsuariopublic static IDataReader ListarPerfilPorUsuario(int idUsuario, DateTime periodo)Lista perfis de um usuário para um período específico.
ListarPerfilPorUsuarioSistemapublic static IDataReader ListarPerfilPorUsuarioSistema(int idUsuario, DateTime periodo, string direcaoOrdenacao, int Idf_Sistema)Lista perfis de um usuário para um sistema e período, com ordenação.
Listarpublic static List<Usuario> Listar()Retorna uma lista de todos os usuários.
Listarpublic static DataTable Listar(string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros)Lista usuários com paginação e ordenação.
Listarpublic static SqlDataReader Listar(List<int> pLstIdUsuario, string pNomeColuna, string pDirecaoOrdenacao, int pPaginaCorrente, int pTamanhoPagina, out int pTotalRegistros)Lista usuários por uma lista de IDs, com paginação e ordenação.
ListarUsuariosCadastradosFiltropublic static SqlDataReader ListarUsuariosCadastradosFiltro(string pNome, string pCpf, string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, int? lsExibir, out int totalRegistros)Lista usuários cadastrados com filtros de nome, CPF e status, com paginação e ordenação.
ListarPermissoesPorUsuariopublic static IDataReader ListarPermissoesPorUsuario(string pesquisa, int idUsuario, string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros)Lista permissões de um usuário com filtros de pesquisa, paginação e ordenação.
ListarPermissoesDeVisualizacaoRelatorioESocialPorUsuariopublic static List<PermissaoTipoInscricaoESocial> ListarPermissoesDeVisualizacaoRelatorioESocialPorUsuario(int idUsuario)Retorna uma lista de permissões de visualização de relatórios eSocial por tipo de inscrição para um usuário.
ListarCPFspublic static List<decimal> ListarCPFs()Retorna uma lista de todos os CPFs de usuários.
SetInstanceprivate static bool SetInstance(IDataReader dr, Usuario objUsuario, bool bDispose = true)Método auxiliar para preencher uma instância de Usuario a partir de um IDataReader.
GetNomeCPFpublic static string GetNomeCPF(Int64 idfUsuario)Retorna o ID e CPF de um usuário formatados.
RelatorioUsuariosPorPerfilpublic static void RelatorioUsuariosPorPerfil(int pIdPerfil, List<ReportParameter> param, List<ReportDataSource> dsT)Preenche dados para um relatório de usuários por perfil.
CarregarUsuariosFilaAtualizcaoPontopublic static DataTable CarregarUsuariosFilaAtualizcaoPonto(int numeroTentativas)Retorna usuários na fila de atualização de ponto com base no número de tentativas.
VerificarFiliaisPontopublic static Dictionary<int, int> VerificarFiliaisPonto(decimal cpfUsuario, SqlTransaction trans)Verifica as filiais que um usuário tem permissão no sistema de ponto.
ExibirNomeFormatContaPagarpublic static string ExibirNomeFormatContaPagar(int idUsuario)Retorna o nome formatado de um usuário para o módulo de Contas a Pagar.
RecuperarFiliaisQueUsuarioTemAcessopublic static DataTable RecuperarFiliaisQueUsuarioTemAcesso(int idfUsuario, int idEmpresa)Retorna todas as filiais que um usuário tem acesso dentro de uma empresa.
CarregarPermissaoTelapublic static DataTable CarregarPermissaoTela(Usuario usuario, Enumeradores.CategoriaPermissao categoria)Retorna as permissões de uma tela para um usuário em uma categoria específica.
AjustarUltimaEmpresaLogadapublic static void AjustarUltimaEmpresaLogada(int idfUsuario)Ajusta a última empresa logada de um usuário se ele não tiver mais acesso a ela.
PossuiAcessopublic static bool PossuiAcesso(int idfUsuario, int idfEmpresa)Verifica se um usuário possui acesso a uma empresa.
ValidaPerfilPrincipalpublic static bool ValidaPerfilPrincipal(int idfUsuario)Valida se o perfil principal de um usuário não é um perfil de “senha master”.
PerfilUsuarioSistemaSenhaMasterpublic static bool PerfilUsuarioSistemaSenhaMaster(int idUsuario, DateTime periodo, int Idf_Sistema)Verifica se um usuário possui um perfil de “senha master” em um sistema para um período.
FilialPadraoDoUsuarioPorEmpresapublic static int? FilialPadraoDoUsuarioPorEmpresa(int idfUsuario, int idfEmpresa)Retorna o ID da única filial que o usuário tem acesso dentro de uma empresa, se houver apenas uma.
CarregarIdentificacaoUsuariopublic static string CarregarIdentificacaoUsuario(int idUsuario)Retorna a identificação de um usuário (nome ou CPF formatado).

Detalhamento de Métodos Importantes

GetParameters()

  • Lógica:
  1. Cria uma nova lista de SqlParameter.
  2. Adiciona 10 parâmetros à lista, cada um com seu nome, tipo SQL e tamanho. Os parâmetros são: @Idf_Usuario, @Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo.
  3. Retorna a lista de parâmetros.
  • Propósito: Este método é um utilitário interno para padronizar a criação dos parâmetros SQL usados nas operações de persistência (Insert, Update).

SetParameters(List parms)

  • Lógica:
  1. Recebe uma lista de SqlParameter como entrada.
  2. Preenche o Value de cada parâmetro na lista com os valores dos atributos da instância atual de Usuario.
  3. Define _sistemaGerador como uma nova instância de Sistema com o ID Enumeradores.Sistema.webfopag.
  4. Para _ultimaEmpresa, _sistemaGerador e _idPessoaFisica, se forem null ou não tiverem valor, define o valor do parâmetro como DBNull.Value.
  5. Condição !this._persisted (para inserção):
  • Define a Direction do parâmetro @Idf_Usuario como Output (para receber o ID gerado pelo banco).
  1. Condição this._persisted (para atualização):
  • Define a Direction do parâmetro @Idf_Usuario como Input.
  1. Define _usuarioGerador com o ID do usuário logado (obtido da Session).
  2. Define Dta_Cadastro com a data e hora atuais (DateTime.Now).
  • Propósito: Este método é um utilitário interno para vincular os dados da instância da classe aos parâmetros SQL antes de executar uma consulta de insert ou update.

Insert()

  • Lógica:
  1. Chama GetParameters() para obter uma lista de parâmetros SQL vazia.
  2. Chama SetParameters(parms) para preencher os parâmetros com os dados da instância atual, configurando @Idf_Usuario como Output.
  3. Abre uma nova conexão SQL (SqlConnection) e inicia uma transação (SqlTransaction).
  4. Executa a consulta SQL SPINSERT (definida como SQL inline) usando DataAccessLayer.ExecuteNonQueryCmd.
  5. Recupera o Idf_Usuario gerado pelo banco de dados (usando SCOPE_IDENTITY()) e atribui à propriedade _idUsuario.
  6. Limpa os parâmetros do comando.
  7. Gerencia UsuarioPerfil:
  • Tenta carregar um UsuarioPerfil existente para o _idUsuario e _perfilPrincipal.IdPerfil.
  • Se não existir, cria um novo UsuarioPerfil, associa o Usuario e Perfil e o salva (objUsuarioPerfil.Save(trans)).
  1. Gerencia PeriodoPermissao:
  • Tenta carregar um PeriodoPermissao existente para o _idUsuario, _perfilPrincipal.IdPerfil e a data atual.
  • Se existir, define DataFim como null e o salva (objPeriodoPermissao.Save(trans)).
  • Se não existir, cria um novo PeriodoPermissao, define DataInicio como a data atual, associa o UsuarioPerfil e o salva (objPeriodoPermissao.Save(trans)).
  1. Define _persisted como true e _modified como false.
  2. Comita a transação.
  3. Chama AuditoriaEventMapTransaction.IntegrarAuditoriaEventMap(trans) para integrar eventos de auditoria.
  4. Em caso de exceção, faz rollback da transação, remove eventos de auditoria pendentes e relança a exceção.
  • Stored Procedures chamadas:
  • SQL inline: INSERT INTO TAB_Usuario (Num_CPF, Idf_Perfil_Principal, Idf_Ultima_Empresa, Idf_Usuario_Gerador, Idf_Sistema_Gerador, Idf_Pessoa_Fisica, Flg_Interno, Dta_Cadastro, Flg_Inativo) VALUES (@Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo);SET @Idf_Usuario = SCOPE_IDENTITY();
  • Parâmetros: @Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo, @Idf_Usuario (output)
  • Propósito: Insere um novo registro na tabela TAB_Usuario e retorna o ID gerado.
  • Chamadas a outros métodos/classes:
  • UsuarioPerfil.CarregarPorUsuarioPerfil(int idUsuario, int idPerfil, SqlTransaction trans, out UsuarioPerfil objUsuarioPerfil)
  • UsuarioPerfil.Save(SqlTransaction trans)
  • PeriodoPermissao.CarregarPorUsuarioPerfilPeriodo(int idUsuario, int idPerfil, DateTime periodo, SqlTransaction trans, out PeriodoPermissao objPeriodoPermissao)
  • PeriodoPermissao.Save(SqlTransaction trans)
  • AuditoriaEventMapTransaction.IntegrarAuditoriaEventMap(SqlTransaction trans)
  • AuditoriaEventMapTransaction.RemoverAuditoriaEventMap(SqlTransaction trans)

Update(bool auditar = true)

  • Lógica:
  1. Auditoria: Se auditar for true:
  • Carrega o estado atual do objeto Usuario do banco de dados para PreUpdateAuditoria (para comparação na auditoria).
  • Chama CompletarInformacoesAuditoria(PreUpdateAuditoria, null, false) para preencher informações de auditoria do estado anterior.
  1. Verifica se a instância foi modificada (_modified). Se não foi, não faz nada.
  2. Abre uma nova conexão SQL (SqlConnection) e inicia uma transação (SqlTransaction).
  3. Chama GetParameters() e SetParameters(parms) para preparar os parâmetros.
  4. Executa a consulta SQL SPUPDATE (definida como SQL inline) usando DataAccessLayer.ExecuteNonQuery.
  5. Gerencia UsuarioPerfil e PeriodoPermissao: Lógica idêntica à do método Insert(), garantindo que o perfil principal e o período de permissão estejam atualizados.
  6. Define _modified como false.
  7. Comita a transação.
  8. Em caso de exceção, faz rollback da transação e relança a exceção.
  • Stored Procedures chamadas:
  • SQL inline: UPDATE TAB_Usuario SET Num_CPF = @Num_CPF, Idf_Perfil_Principal = @Idf_Perfil_Principal, Idf_Ultima_Empresa = @Idf_Ultima_Empresa, Idf_Usuario_Gerador = @Idf_Usuario_Gerador, Idf_Sistema_Gerador = @Idf_Sistema_Gerador, Idf_Pessoa_Fisica = @Idf_Pessoa_Fisica, Flg_Interno = @Flg_Interno, Dta_Cadastro = @Dta_Cadastro, Flg_Inativo = @Flg_Inativo WHERE Idf_Usuario = @Idf_Usuario
  • Parâmetros: @Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo, @Idf_Usuario
  • Propósito: Atualiza um registro existente na tabela TAB_Usuario.
  • Chamadas a outros métodos/classes:
  • LoadObject(int idUsuario): Para carregar o estado anterior para auditoria.
  • CompletarInformacoesAuditoria(Usuario usuario, Usuario atual = null, bool consultarDescricaoReferencia = true): Para preencher informações de auditoria.
  • UsuarioPerfil.CarregarPorUsuarioPerfil(...), UsuarioPerfil.Save(...), PeriodoPermissao.CarregarPorUsuarioPerfilPeriodo(...), PeriodoPermissao.Save(...): Mesmas chamadas do Insert().

Save(bool auditar = true)

  • Lógica:
  1. Verifica a propriedade _persisted.
  2. Se _persisted for false (nova instância), chama this.Insert().
  3. Se _persisted for true (instância existente), chama this.Update(auditar).
  4. Se auditar for true, chama SalvarAuditoria(this).
  • Regras de negócio: Decide entre inserir ou atualizar com base no estado de persistência do objeto. Integra a funcionalidade de auditoria.
  • Chamadas a outros métodos/classes:
  • Insert() ou Update(bool auditar)
  • SalvarAuditoria(Usuario auditoria, SqlTransaction trans = null, bool ehDelete = false, AtividadeAuditoriaDTO atividade = null)

Delete(int usuario)

  • Lógica:
  1. Carrega o objeto Usuario antes da exclusão para fins de auditoria (LoadObject(usuario)).
  2. Cria uma lista de SqlParameter e adiciona @Idf_Usuario e @Idf_Usuario_Gerador.
  3. Define o valor do parâmetro @Idf_Usuario com o usuario fornecido.
  4. Define o valor do parâmetro @Idf_Usuario_Gerador com o ID do usuário logado (obtido da Session).
  5. Executa a consulta SQL SPDELETE (definida como SQL inline) usando DataAccessLayer.ExecuteNonQuery.
  • Stored Procedures chamadas:
  • SQL inline: UPDATE TAB_Usuario SET Idf_Usuario_Gerador = @Idf_Usuario_Gerador WHERE Idf_Usuario = @Idf_Usuario ; DELETE FROM TAB_Usuario WHERE Idf_Usuario = @Idf_Usuario
  • Parâmetros: @Idf_Usuario_Gerador, @Idf_Usuario
  • Propósito: Atualiza o Idf_Usuario_Gerador e em seguida exclui um registro da tabela TAB_Usuario.
  • Chamadas a outros métodos/classes:
  • LoadObject(int usuario): Para obter o objeto antes da exclusão (provavelmente para auditoria).

SalvarAuditoria(Usuario auditoria, SqlTransaction trans = null, bool ehDelete = false, AtividadeAuditoriaDTO atividade = null)

  • Lógica:
  1. Verifica se a auditoria está habilitada (GlobalSettingsSingleton.AuditoriaHabilitada). Se não, retorna.
  2. Determina o tipoAcao (Insert, Update, Delete, Inativacao, Ativacao) com base em ehDelete e auditoria.PreUpdateAuditoria. Se for um update e o status de inatividade mudou, ajusta o tipoAcao.
  3. Condição tipoAcao != OperacaoEventoMap.Delete:
  • Chama CompletarInformacoesAuditoria(auditoria) para garantir que o objeto auditoria tenha todas as informações necessárias.
  1. Cria uma nova instância de AuditoriaQueue com todos os detalhes do evento de auditoria (tipo de ação, estado anterior/atual, IDs, descrição, tipo de evento, campos a ignorar, mapeamento de objetos, se é transacional, atividade).
  2. Adiciona o auditoriaQueue ao MongoAcessLayer (provavelmente um sistema de log/auditoria baseado em MongoDB).
  3. Se uma transação (trans) for fornecida, também adiciona o evento de auditoria à transação (MongoAcessLayer.Instance.AddTransacaoAuditoria).
  4. Em caso de exceção, loga o erro usando PlataformaLog.LogError.WriteLog.
  5. No bloco finally, limpa as propriedades de auditoria (PreUpdateAuditoria) do objeto auditoria e de seus objetos relacionados (PessoaFisica, LoginUsuario).
  • Regras de negócio: Implementa a lógica central de auditoria para a entidade Usuario, registrando as mudanças no banco de dados e em um sistema de log externo (MongoDB).
  • Chamadas a outros métodos/classes:
  • CompletarInformacoesAuditoria(Usuario usuario, Usuario atual = null, bool consultarDescricaoReferencia = true)
  • MongoAcessLayer.Instance.Add(AuditoriaQueue auditoriaQueue)
  • MongoAcessLayer.Instance.AddTransacaoAuditoria(AuditoriaQueue auditoriaQueue, SqlTransaction trans)
  • PlataformaLog.LogError.WriteLog(...)

CarregarPermissoes(Usuario usuario, Enumeradores.CategoriaPermissao categoria)

  • Lógica:
  1. Cria uma nova lista de inteiros (permissoes) para armazenar os IDs das permissões.
  2. Cria uma lista de SqlParameter e adiciona @Idf_Categoria_Permissao e @Idf_Usuario.
  3. Define os valores dos parâmetros com a categoria e usuario.IdUsuario fornecidos.
  4. Executa a consulta SQL SPSELECTPERMISSOESUSUARIO (definida como SQL inline) usando DataAccessLayer.ExecuteReader.
  5. Itera sobre o IDataReader (while (dr.Read())):
  • Para cada linha, adiciona o valor da coluna “Permissao” (convertido para int) à lista permissoes.
  1. Fecha e descarta o IDataReader.
  2. Retorna a lista de permissoes.
  • Stored Procedures chamadas:
  • SQL inline (SPSELECTPERMISSOESUSUARIO): SELECT DISTINCT p.Idf_Permissao as Permissao FROM TAB_Periodo_Permissao pp INNER JOIN TAB_Perfil_Permissao p ON pp.Idf_Perfil = p.Idf_Perfil INNER JOIN plataforma.TAB_Permissao per ON p.Idf_Permissao = per.Idf_Permissao WHERE Idf_Usuario = @idf_usuario AND Dta_Inicio <= GETDATE() AND (Dta_Fim >= GETDATE() OR Dta_Fim IS NULL) AND per.Idf_Categoria_Permissao = @Idf_Categoria_Permissao
  • Parâmetros: @idf_usuario, @Idf_Categoria_Permissao
  • Propósito: Retorna as permissões ativas de um usuário em uma determinada categoria.

Listar(string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros)

  • Lógica:
  1. Cria uma lista de SqlParameter para @SortExpression, @CurrentPage, @PageSize e @WhereExpression.
  2. Define os valores dos parâmetros com os argumentos fornecidos. @SortExpression é uma concatenação de nomeColuna e direcaoOrdenacao.
  3. Executa a consulta SQL SPSELECTPAG (definida como SQL inline) usando DataAccessLayer.ExecuteReaderDs, que retorna um DataSet.
  4. O totalRegistros é obtido da primeira tabela do DataSet (que contém a contagem).
  5. Retorna a segunda tabela do DataSet (que contém os dados paginados).
  • Stored Procedures chamadas:
  • SQL inline (SPSELECTPAG): DECLARE @FirstRec INT ... EXECUTE (@iSelectCount) EXECUTE (@iSelectPag)
  • Parâmetros: @CurrentPage, @PageSize, @SortExpression, @WhereExpression
  • Propósito: Retorna uma consulta paginada de usuários, incluindo o total de registros.

ListarPermissoesPorUsuario(string pesquisa, int idUsuario, string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros)

  • Lógica:
  1. Cria uma lista de SqlParameter para @CurrentPage, @PageSize, @Idf_Usuario e @Pesquisa.
  2. Define os valores dos parâmetros.
  3. Constrói a string orderBy com nomeColuna e direcaoOrdenacao.
  4. Formata a string SQL SPSELPERMISSOES com a orderBy.
  5. Executa a consulta SQL formatada usando DataAccessLayer.ExecuteReader.
  6. Lê o primeiro resultado do IDataReader para obter o totalRegistros.
  7. Avança para o próximo conjunto de resultados (dr.NextResult()) que contém os dados das permissões.
  8. Retorna o IDataReader posicionado nos dados das permissões.
  • Stored Procedures chamadas:
  • SQL inline (SPSELPERMISSOES): DECLARE @FirstRec INT ... SELECT ROW_NUMBER() OVER (ORDER BY {0}) AS RowID, * INTO #ACESSOTMP FROM (...) AS TAB SELECT COUNT(*) FROM #AcessoTMP SELECT * FROM #AcessoTMP WHERE 1 = 1 AND RowID > @FirstRec AND RowID < @LastRec DROP TABLE #AcessoTMP
  • Parâmetros: @CurrentPage, @PageSize, @Idf_Usuario, @Pesquisa
  • Propósito: Retorna permissões de acesso de um usuário a diferentes níveis (grupo econômico, empresa, filial, contrato, centro de resultado), com paginação e filtro de pesquisa.

SetInstance(IDataReader dr, Usuario objUsuario, bool bDispose = true)

  • Lógica:
  1. Tenta ler a primeira linha do IDataReader (dr.Read()).
  2. Se houver uma linha:
  • Preenche todos os atributos da objUsuario com os valores correspondentes do IDataReader, realizando as conversões de tipo necessárias.
  • Para _ultimaEmpresa, _sistemaGerador, _idPessoaFisica e _dataCadastro, verifica DBNull.Value antes de converter.
  • Instancia objetos Perfil, Empresa, Usuario e Sistema para as propriedades relacionadas.
  • Define _persisted como true e _modified como false.
  • Retorna true.
  1. Se não houver linha para ler, retorna false.
  2. Em caso de exceção durante a leitura/conversão, relança a exceção.
  3. No bloco finally, se bDispose for true, descarta o IDataReader (dr.Dispose()).
  • Propósito: É um método auxiliar fundamental para mapear os resultados de uma consulta SQL para um objeto Usuario. O parâmetro bDispose permite controlar se o IDataReader deve ser descartado, útil quando o leitor é usado em um loop externo.

Stored Procedures

NomeParâmetrosPropósito
INSERT INTO TAB_Usuario (Num_CPF, Idf_Perfil_Principal, Idf_Ultima_Empresa, Idf_Usuario_Gerador, Idf_Sistema_Gerador, Idf_Pessoa_Fisica, Flg_Interno, Dta_Cadastro, Flg_Inativo) VALUES (@Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo);SET @Idf_Usuario = SCOPE_IDENTITY();@Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo, @Idf_Usuario (output)Insere um novo registro na tabela TAB_Usuario e retorna o ID gerado.
UPDATE TAB_Usuario SET Num_CPF = @Num_CPF, Idf_Perfil_Principal = @Idf_Perfil_Principal, Idf_Ultima_Empresa = @Idf_Ultima_Empresa, Idf_Usuario_Gerador = @Idf_Usuario_Gerador, Idf_Sistema_Gerador = @Idf_Sistema_Gerador, Idf_Pessoa_Fisica = @Idf_Pessoa_Fisica, Flg_Interno = @Flg_Interno, Dta_Cadastro = @Dta_Cadastro, Flg_Inativo = @Flg_Inativo WHERE Idf_Usuario = @Idf_Usuario@Num_CPF, @Idf_Perfil_Principal, @Idf_Ultima_Empresa, @Idf_Usuario_Gerador, @Idf_Sistema_Gerador, @Idf_Pessoa_Fisica, @Flg_Interno, @Dta_Cadastro, @Flg_Inativo, @Idf_UsuarioAtualiza um registro existente na tabela TAB_Usuario.
UPDATE TAB_Usuario SET Idf_Usuario_Gerador = @Idf_Usuario_Gerador WHERE Idf_Usuario = @Idf_Usuario ; DELETE FROM TAB_Usuario WHERE Idf_Usuario = @Idf_Usuario@Idf_Usuario_Gerador, @Idf_UsuarioAtualiza o Idf_Usuario_Gerador e em seguida exclui um registro da tabela TAB_Usuario.
SELECT * FROM TAB_Usuario WHERE Idf_Usuario = @Idf_Usuario@Idf_UsuarioRecupera um registro específico da tabela TAB_Usuario.
SELECT ROW_NUMBER() OVER (ORDER BY {colunaOrdenacao} {direcaoOrdenacao}) AS RowID, Usu.Idf_Usuario, ... FROM TAB_Usuario UsucolunaOrdenacao, direcaoOrdenacao (concatenados na string SQL)Retorna um conjunto de usuários com paginação e ordenação.
DECLARE @FirstRec INT ... SELECT ROW_NUMBER() OVER (ORDER BY {0}) AS RowID, * INTO #ACESSOTMP FROM (...) AS TAB SELECT COUNT(*) FROM #AcessoTMP SELECT * FROM #AcessoTMP WHERE 1 = 1 AND RowID > @FirstRec AND RowID < @LastRec DROP TABLE #AcessoTMP@CurrentPage, @PageSize, @Idf_Usuario, @PesquisaRetorna permissões de acesso de um usuário a diferentes níveis (grupo econômico, empresa, filial, contrato, centro de resultado), com paginação e filtro de pesquisa.
SELECT * FROM (...) AS TAB (parte da SPSELPERMISSOESVISUALIZACAOESOCIAL)@IdF_UsuarioSeleciona permissões de visualização de eSocial para um usuário, agregando dados de grupos econômicos, empresas, filiais, contratos e centros de resultado, incluindo exceções.
DECLARE @FirstRec INT ... EXECUTE (@iSelectCount) EXECUTE (@iSelectPag)@CurrentPage, @PageSize, @SortExpression, @WhereExpressionConsulta paginada de usuários, incluindo o total de registros.
SELECT Usu.Flg_Interno, Usu.Num_CPF, Usu.Flg_Inativo, Pfi.Nme_Pessoa, Pfi.Ape_Pessoa, Pfi.Dta_Nascimento, Pfi.Num_DDD_Telefone, Pfi.Num_Telefone, Pfi.Num_DDD_Celular, Pfi.Num_Celular, Pfi.Eml_Pessoa FROM TAB_Usuario Usu LEFT JOIN TAB_Pessoa_Fisica Pfi ON Pfi.Num_CPF = Usu.Num_CPF WHERE (@Nome IS NULL OR Pfi.Nme_Pessoa LIKE '%' + @Nome + '%') AND (@Status IS NULL OR usu.Flg_Inativo = @Status)@Nome, @StatusSeleciona usuários com base no nome e status de inatividade.
SELECT Usu.Flg_Interno, Usu.Num_CPF, Usu.Flg_Inativo, Pfi.Nme_Pessoa, Pfi.Ape_Pessoa, Pfi.Dta_Nascimento, Pfi.Num_DDD_Telefone, Pfi.Num_Telefone, Pfi.Num_DDD_Celular, Pfi.Num_Celular, Pfi.Eml_Pessoa FROM TAB_Usuario Usu LEFT JOIN TAB_Pessoa_Fisica Pfi ON Pfi.Num_CPF = Usu.Num_CPF WHERE Usu.Num_CPF = @N_CPF AND (@Status IS NULL OR usu.Flg_Inativo = @Status)@N_CPF, @StatusSeleciona usuários com base no CPF e status de inatividade.
SELECT TAB_Perfil.Idf_Perfil, TAB_Perfil.Des_Perfil, TAB_Pessoa_Fisica.Nme_Pessoa, (...) AS Num_CPF, TAB_Pessoa_Fisica.Eml_Pessoa, (...) AS Celular FROM TAB_Usuario INNER JOIN TAB_Pessoa_Fisica ON TAB_Usuario.Num_CPF = TAB_Pessoa_Fisica.Num_CPF INNER JOIN TAB_Usuario_Perfil ON TAB_Usuario.Idf_Usuario = TAB_Usuario_Perfil.Idf_Usuario INNER JOIN TAB_Perfil ON TAB_Usuario_Perfil.Idf_Perfil = TAB_Perfil.Idf_Perfil WHERE 1 = 1 AND TAB_Perfil.Flg_Inativo = 0 AND TAB_Perfil.Idf_Perfil = @Idf_Perfil ORDER BY TAB_Pessoa_Fisica.Nme_Pessoa ASC@Idf_PerfilSeleciona usuários por perfil para relatório, formatando CPF e celular.
SELECT * FROM TAB_Usuario WHERE Num_CPF = @Num_CPF@Num_CPFSeleciona um usuário pelo CPF.
SELECT DISTINCT Usu.Num_CPF FROM TAB_Usuario UsuNenhumSeleciona todos os CPFs distintos de usuários.
SELECT Per.Idf_Perfil, CASE WHEN Ppe.Idf_Usuario IS NULL THEN 0 ELSE 1 END AS Upe_Permissao, Per.Des_Perfil, Ppe.Dta_Inicio, Ppe.Dta_Fim, CASE WHEN Usu.Idf_Perfil_Principal = Per.Idf_Perfil THEN 1 ELSE 0 END AS Upe_Perfil_Principal FROM TAB_Perfil Per LEFT JOIN Tab_Usuario Usu ON Usu.Idf_Usuario = @Idf_Usuario LEFT JOIN TAB_Usuario_Perfil Upe ON Upe.Idf_Perfil = Per.Idf_Perfil AND Upe.Idf_Usuario = Usu.Idf_Usuario LEFT JOIN TAB_Periodo_Permissao Ppe ON Ppe.Idf_Usuario = Upe.Idf_Usuario AND Ppe.Idf_Perfil = Upe.Idf_Perfil AND (Ppe.Dta_Fim IS NULL OR Ppe.Dta_Fim >= @Dta_Periodo) WHERE Per.Flg_Inativo = 0 ORDER BY Per.Des_Perfil@Idf_Usuario, @Dta_PeriodoSeleciona perfis de um usuário, indicando permissão e se é o perfil principal.
SELECT Per.Idf_Perfil, CASE WHEN Ppe.Idf_Usuario IS NULL THEN 0 ELSE 1 END AS Upe_Permissao, Per.Des_Perfil, Ppe.Dta_Inicio, Ppe.Dta_Fim, CASE WHEN Usu.Idf_Perfil_Principal = Per.Idf_Perfil THEN 1 ELSE 0 END AS Upe_Perfil_Principal, 0 AS PermissaoSOS FROM TAB_Perfil Per LEFT JOIN Tab_Usuario Usu ON Usu.Idf_Usuario = @Idf_Usuario LEFT JOIN TAB_Usuario_Perfil Upe ON Upe.Idf_Perfil = Per.Idf_Perfil AND Upe.Idf_Usuario = Usu.Idf_Usuario LEFT JOIN TAB_Periodo_Permissao Ppe ON Ppe.Idf_Usuario = Upe.Idf_Usuario AND Ppe.Idf_Perfil = Upe.Idf_Perfil AND (Ppe.Dta_Fim IS NULL OR Ppe.Dta_Fim >= @Dta_Periodo) WHERE Per.Flg_Inativo = 0 AND Per.Idf_Sistema in (0,@Idf_Sistema) ORDER BY Per.Des_Perfil {0}@Idf_Usuario, @Dta_Periodo, @Idf_Sistema, {0} (direcaoOrdenacao)Seleciona perfis de um usuário para um sistema específico, com ordenação.
SELECT DISTINCT p.Idf_Permissao as Permissao FROM TAB_Periodo_Permissao pp INNER JOIN TAB_Perfil_Permissao p ON pp.Idf_Perfil = p.Idf_Perfil INNER JOIN plataforma.TAB_Permissao per ON p.Idf_Permissao = per.Idf_Permissao WHERE Idf_Usuario = @idf_usuario AND Dta_Inicio <= GETDATE() AND (Dta_Fim >= GETDATE() OR Dta_Fim IS NULL) AND per.Idf_Categoria_Permissao = @Idf_Categoria_Permissao@idf_usuario, @Idf_Categoria_PermissaoRetorna as permissões ativas de um usuário em uma determinada categoria.
SELECT * FROM TAB_Usuario INNER JOIN TAB_PESSOA_FISICA PF ON TAB_Usuario.Num_Cpf = PF.Num_Cpf WHERE PF.Nme_Pessoa LIKE '%' + @Nme_Pessoa + '%' OR PF.Num_CPF LIKE '%' + @Num_CPF + '%'@Nme_Pessoa, @Num_CPFSeleciona usuários por nome ou CPF parcial.
SELECT * FROM TAB_Usuario INNER JOIN TAB_PESSOA_FISICA ON TAB_Usuario.Num_Cpf = TAB_PESSOA_FISICA.Num_Cpf WHERE Nme_Pessoa LIKE '%' + @Nme_Pessoa + '%'@Nme_PessoaSeleciona usuários por nome parcial.
select top 250 usu.idf_usuario, fip.Idf_Fila_Integracao_Ponto, pf.Num_CPF, pf.Nme_Pessoa, (case when (...) is not null then '59' when (...) is not null then '65' else '13' end) Tipo_usuario, isnull(cont.Idf_Filial_Gestora,fip.Idf_Filial) as Idf_Filial_Gestora, isnull(cont.Idf_Empresa,filial_informada.Idf_Empresa) as Idf_Empresa from TAB_Pessoa_Fisica pf join TAB_Fila_Integracao_Ponto fip on (fip.Idf_Pessoa_Fisica = pf.Idf_Pessoa_Fisica) left join TAB_Usuario usu on (pf.Num_CPF = usu.Num_CPF) left join TAB_Empregado emp on (emp.idf_pessoa_fisica = pf.idf_pessoa_fisica) left join TAB_Contrato cont on (cont.Idf_Contrato = emp.Idf_Contrato) left join TAB_Filial filial_informada on (filial_informada.Idf_Filial = fip.Idf_Filial) where fip.Flg_Enviado = 0 and fip.Idf_Pessoa_Fisica is not null and isnull(emp.Flg_Inativo,0) = 0 and fip.Num_Tentativas < @Num_Tentativas order by fip.Dta_Cadastro desc, fip.Num_Tentativas asc@Num_TentativasSeleciona usuários na fila de integração de ponto com base no número de tentativas.
select uf.Idf_Filial, pes.Vlr_Parametro from TAB_Usuario usu left join tab_usuario_filial uf on (uf.Idf_Usuario = usu.Idf_Usuario) join TAB_Parametro_Especifico pes on (pes.Idf_Filial = uf.Idf_Filial) where usu.Num_Cpf = @Num_CPF and pes.Idf_Parametro = 424 group by uf.Idf_Filial, pes.Vlr_Parametro union select fi.Idf_Filial, pes.Vlr_Parametro from TAB_Usuario usu left join TAB_Usuario_Grupo_Economico uge on (uge.Idf_Usuario = usu.Idf_Usuario) left join TAB_Empresa emp on (emp.Idf_Grupo_Economico = uge.Idf_Grupo_Economico) left join TAB_Filial fi on (fi.Idf_Empresa = emp.Idf_Empresa) join TAB_Parametro_Especifico pes on ((pes.Idf_Filial = fi.Idf_Filial) or (pes.Idf_Empresa = emp.Idf_Empresa)) where usu.Num_Cpf = @Num_CPF and pes.Idf_Parametro = 424 and fi.Flg_Matriz = 1 group by fi.Idf_Filial, pes.Vlr_Parametro union select isnull(pes.Idf_Filial,fi.Idf_Filial) Idf_Filial, pes.Vlr_Parametro from TAB_Usuario usu left join TAB_Usuario_Empresa emp on (emp.Idf_Usuario = usu.Idf_Usuario) left join TAB_Filial fi on (fi.Idf_Empresa = emp.Idf_Empresa) left join TAB_Parametro_Especifico pes on (pes.Idf_Filial = fi.Idf_Filial) left join TAB_Parametro_Especifico pes2 on (pes2.Idf_Empresa = emp.Idf_Empresa) where usu.Num_Cpf = @Num_CPF and pes.Idf_Parametro = 424 group by pes.Idf_Filial, fi.Idf_Filial, pes.Vlr_Parametro@Num_CPFVerifica as filiais que um usuário tem permissão no sistema de ponto, considerando diferentes níveis de acesso (filial, grupo econômico, empresa).
SELECT Usu.Codigo + ' - ' + Usu.Nome AS Nome, Idf_Usuario from (SELECT DISTINCT Us.Idf_Usuario, SUBSTRING(CAST(REPLICATE('0', 11-LEN(ISNULL(CONVERT(VARCHAR,Pf.Num_CPF), 0))) + CONVERT(VARCHAR,Pf.Num_CPF) As Varchar),1,3) + '.' + SUBSTRING(CAST(REPLICATE('0', 11-LEN(ISNULL(CONVERT(VARCHAR,Pf.Num_CPF), 0))) + CONVERT(VARCHAR,Pf.Num_CPF) As Varchar),4,3) + '.' + SUBSTRING(CAST(REPLICATE('0', 11-LEN(ISNULL(CONVERT(VARCHAR,Pf.Num_CPF), 0))) + CONVERT(VARCHAR,Pf.Num_CPF) As Varchar),7,3) + '-' + SUBSTRING(CAST(REPLICATE('0', 11-LEN(ISNULL(CONVERT(VARCHAR,Pf.Num_CPF), 0))) + CONVERT(VARCHAR,Pf.Num_CPF) As Varchar),10,2) AS Codigo, Pf.Nme_Pessoa Nome FROM TAB_Usuario Us JOIN TAB_Pessoa_Fisica Pf ON Us.Num_CPF = Pf.Num_CPF WHERE Us.Idf_Usuario = @Idf_Usuario ) Usu@Idf_UsuarioRetorna o nome e CPF formatados de um usuário para o módulo de Contas a Pagar.
SELECT * FROM TAB_Filial fil WHERE Flg_Inativo = 0 AND Idf_Empresa = @Idf_Empresa AND (@Idf_Usuario IS NULL OR (Fil.Idf_Filial IN (SELECT UA.Idf_Filial FROM TAB_SF_Usuario_Acesso(@Idf_Usuario, @Idf_Empresa) UA)))@Idf_Usuario, @Idf_EmpresaRetorna as filiais que um usuário tem acesso dentro de uma empresa, utilizando uma função de tabela TAB_SF_Usuario_Acesso.
SELECT PRM.Des_Permissao as [Permissão], numPerfis as Acesso FROM plataforma.TAB_Permissao PRM OUTER APPLY (SELECT Count(PrfPrm.Idf_Perfil) numPerfis FROM TAB_Perfil_Permissao PrfPrm INNER join TAB_Usuario_Perfil UPrf on PrfPrm.Idf_Perfil = UPrf.idf_Perfil INNER join TAB_Periodo_Permissao PdoPrm on UPrf.Idf_Perfil = PdoPrm.Idf_Perfil AND UPrf.Idf_Usuario = PdoPrm.Idf_Usuario AND (PdoPrm.Dta_Fim IS NULL OR PdoPrm.Dta_Fim > GETDATE()) WHERE PRM.idf_Permissao = PrfPrm.idf_Permissao AND UPrf.Idf_Usuario = @Idf_Usuario ) as P WHERE 1 = 1 AND PRM.Idf_Categoria_Permissao = @Idf_Categoria_Permissao@Idf_Usuario, @Idf_Categoria_PermissaoRetorna as permissões de uma tela para um usuário em uma categoria específica, indicando se o acesso é permitido.
SELECT COUNT(*) FROM TAB_SF_Usuario_Acesso(@Idf_Usuario, @Idf_Empresa)@Idf_Usuario, @Idf_EmpresaVerifica se um usuário possui acesso a uma empresa, contando os registros retornados pela função de tabela TAB_SF_Usuario_Acesso.
SELECT Idf_Perfil_Principal FROM TAB_Usuario WHERE Idf_Usuario = @Idf_Usuario@Idf_UsuarioRetorna o ID do perfil principal de um usuário.
SELECT CASE WHEN Ppe.Idf_Usuario IS NULL THEN 0 ELSE 1 END AS Upe_Permissao FROM TAB_Perfil Per LEFT JOIN TAB_Usuario Usu ON Usu.Idf_Usuario = @Idf_Usuario LEFT JOIN TAB_Usuario_Perfil Upe ON Upe.Idf_Perfil = Per.Idf_Perfil AND Upe.Idf_Usuario = Usu.Idf_Usuario LEFT JOIN TAB_Periodo_Permissao Ppe ON Ppe.Idf_Usuario = Upe.Idf_Usuario AND Ppe.Idf_Perfil = Upe.Idf_Perfil AND (Ppe.Dta_Fim IS NULL OR Ppe.Dta_Fim >= @Dta_Periodo) WHERE Per.Flg_Inativo = 0 AND Per.Idf_Sistema in (0,@Idf_Sistema) AND Per.Idf_Perfil IN (1013,151)@Idf_Usuario, @Dta_Periodo, @Idf_SistemaVerifica se um usuário possui um perfil de “senha master” em um sistema para um período.
SELECT DISTINCT Idf_Filial FROM TAB_SF_Usuario_Acesso(@Idf_Usuario, @Idf_Empresa) WHERE Idf_Filial IS NOT NULL@Idf_Usuario, @Idf_EmpresaRetorna o ID da única filial que o usuário tem acesso dentro de uma empresa, se houver apenas uma.
select U.Idf_Usuario, U.Num_CPF from tab_usuario U where U.idf_usuario = @Idf_Usuario@Idf_UsuarioRetorna o ID e CPF de um usuário.
SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Sim' vlr_Permissao, Gec.Nme_Grupo_Economico, 'TODOS' Empresa, 'TODOS' Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Grupo_Economico Uge INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Uge.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Uge.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Não' Vlr_Permissao, Gec.Nme_Grupo_Economico, 'TODOS' Empresa, 'TODOS' Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Grupo_Economico_Excecao Uge INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Uge.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Uge.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Sim' vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, 'TODOS' Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Empresa Uem INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Uem.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Uem.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Não' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, 'TODOS' Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Empresa_Excecao Uem INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Uem.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Uem.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Sim' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Filial Ufi INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Ufi.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Filial Fil ON Fil.Idf_Filial = Ufi.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Fil.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Não' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, 'TODOS' Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Filial_Excecao Ufi INNER JOIN TAB_Usuario U ON U.Idf_Usuario = Ufi.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Filial Fil ON Fil.Idf_Filial = Ufi.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Fil.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Sim' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, ISNULL(C.cod_Contrato, C.codigo_contrato_mae) + ' - ' + C.Ape_Contrato AS Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Contrato UC INNER JOIN TAB_Usuario U ON U.Idf_Usuario = UC.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN V_COD_Contrato C ON UC.Idf_Contrato = C.Idf_Contrato INNER JOIN TAB_Filial Fil ON C.Idf_Filial_Gestora = Fil.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Fil.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Não' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, ISNULL(C.cod_Contrato, C.codigo_contrato_mae) + ' - ' + C.Ape_Contrato AS Contrato, 'TODOS' Centro_Resultado FROM TAB_Usuario_Contrato_Excecao UC INNER JOIN TAB_Usuario U ON U.Idf_Usuario = UC.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN V_COD_Contrato C ON UC.Idf_Contrato = C.Idf_Contrato INNER JOIN TAB_Filial Fil ON C.Idf_Filial_Gestora = Fil.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = Fil.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Sim' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, 'TODOS' Contrato, CR.Des_Estrutura_Centro_Resultado + ' - ' + CR.Des_Centro_Resultado AS Centro_Resultado FROM TAB_Usuario_Centro_Resultado UCR INNER JOIN TAB_Usuario U ON U.Idf_Usuario = UCR.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Centro_Resultado CR ON UCR.Idf_Centro_Resultado = CR.Idf_Centro_Resultado LEFT JOIN TAB_Filial Fil ON CR.Idf_Filial = Fil.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = CR.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}) UNION SELECT pf.Num_CPF, pf.Nme_Pessoa, pfp.Des_Perfil, 'Não' Vlr_Permissao, Gec.Nme_Grupo_Economico, CASE WHEN CONVERT(VARCHAR, Emp.Num_CPF) IS NOT NULL THEN CONVERT(VARCHAR, Emp.Num_CPF) + ' - ' + Emp.Raz_Social ELSE CONVERT(VARCHAR, Emp.Num_CNPJ) + ' - ' + Emp.Raz_Social END Empresa, CASE WHEN Fil.Num_CNPJ IS NOT NULL THEN CONVERT(VARCHAR, Fil.Num_CNPJ) + ' - ' + Fil.Ape_Filial ELSE Fil.Ape_Filial END Filial, 'TODOS' Contrato, CR.Des_Estrutura_Centro_Resultado + ' - ' + CR.Des_Centro_Resultado AS Centro_Resultado FROM TAB_Usuario_Centro_Resultado_Excecao UCR INNER JOIN TAB_Usuario U ON U.Idf_Usuario = UCR.Idf_Usuario INNER JOIN TAB_Perfil pfp ON u.Idf_Perfil_Principal = pfp.Idf_Perfil INNER JOIN TAB_Pessoa_Fisica pf ON u.Num_CPF = pf.Num_CPF INNER JOIN TAB_Centro_Resultado CR ON UCR.Idf_Centro_Resultado = CR.Idf_Centro_Resultado LEFT JOIN TAB_Filial Fil ON CR.Idf_Filial = Fil.Idf_Filial AND Fil.Flg_Inativo = 0 INNER JOIN TAB_Empresa Emp ON Emp.Idf_Empresa = CR.Idf_Empresa AND Emp.Flg_Inativo = 0 INNER JOIN TAB_Grupo_Economico Gec ON Gec.Idf_Grupo_Economico = Emp.Idf_Grupo_Economico AND Gec.Flg_Inativo = 0 WHERE U.Num_CPF IN ({0}){0} (lista de CPFs)Retorna informações de agrupamento de usuários (grupo econômico, empresa, filial, contrato, centro de resultado) com base em uma lista de CPFs, incluindo permissões e exceções.

📌 Status: Em desenvolvimento 👤 Responsável: Equipe de QA

Digite para pesquisar...

Scroll para zoom · Esc para fechar

⌨️ Atalhos de teclado
Navegação
Ctrl K Pesquisar na wiki
Ctrl F Buscar na página
? Ver atalhos
Visualização
Ctrl Shift F Modo foco
A+ / A− Tamanho da fonte
Ctrl D Alternar tema
Ações
Ctrl B Favoritar página
Esc Fechar dialogs