🛠️ 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.aspxtem 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
Inicializardo 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
| Nome | Tipo | Obrigatório | Regra |
|---|---|---|---|
| lblTitulo | Employer:Label | ⚪ Não | Título da seção de Imposto de Renda: “Imposto de Renda” |
| pnlImpostoRenda | asp:Panel | ⚪ Não | Painel que agrupa os controles relacionados ao Imposto de Renda convencional. |
| upnImpostoRenda | asp:UpdatePanel | ⚪ Não | Atualiza a seção de Imposto de Renda sem recarregar a página. |
| dlImpostoRenda | asp:DataList | ⚪ Não | Exibe a lista de tabelas de Imposto de Renda. |
| btlDtInicioVigencia | asp:LinkButton | ⚪ Não | Botão para ordenar a lista de Imposto de Renda pela “Data Início Vigência”. |
| btlDtFimVigencia | asp:LinkButton | ⚪ Não | Botão para ordenar a lista de Imposto de Renda pela “Data Fim Vigência”. |
| btiVisualizarSalario | asp:ImageButton | ⚪ Não | Botão para visualizar as faixas de Imposto de Renda de uma tabela específica. |
| btlTabelaVigente | asp:LinkButton | ⚪ Não | Campo oculto que indica se a tabela de IR é a vigente (valor “1”). |
| pnlFaixaImpostoRenda | asp:Panel | ⚪ Não | Painel que exibe o gvFaixaImpostoRenda (visibilidade controlada). |
| gvFaixaImpostoRenda | asp:GridView | ⚪ Não | Exibe as faixas de Imposto de Renda de uma tabela selecionada. Colunas: “Valor inicial”, “Valor limite”, “Alíquota”, “Parcela a deduzir”, “Dedução por dependente”. |
| lblTituloPLR | Employer:Label | ⚪ Não | Título da seção de Imposto de Renda PLR: “Imposto de Renda - PLR” |
| pnlImpostoRendaPLR | asp:Panel | ⚪ Não | Painel que agrupa os controles relacionados ao Imposto de Renda PLR. |
| upnImpostoRendaPLR | asp:UpdatePanel | ⚪ Não | Atualiza a seção de Imposto de Renda PLR sem recarregar a página. |
| dlImpostoRendaPLR | asp:DataList | ⚪ Não | Exibe a lista de tabelas de Imposto de Renda PLR. |
| lbtDataInicioVigenciaPLR | asp:LinkButton | ⚪ Não | Botão para ordenar a lista de Imposto de Renda PLR pela “Data Início Vigência”. |
| lbtDataFimVigenciaPLR | asp:LinkButton | ⚪ Não | Botão para ordenar a lista de Imposto de Renda PLR pela “Data Fim Vigência”. |
| imbVisualizarSalarioPLR | asp:ImageButton | ⚪ Não | Botão para visualizar as faixas de Imposto de Renda PLR de uma tabela específica. |
| lbtTabelaVigentePLR | asp:LinkButton | ⚪ Não | Campo oculto que indica se a tabela de IR PLR é a vigente. |
| pnlFaixaImpostoRendaPLR | asp:Panel | ⚪ Não | Painel que exibe o gdvFaixaImpostoRendaPLR (visibilidade controlada). |
| gdvFaixaImpostoRendaPLR | asp:GridView | ⚪ Não | Exibe 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:Paginacao | UserControl | ⚪ Não | Controle de paginação para o dlImpostoRenda. |
| uc2:TamanhoPaginaGrid | UserControl | ⚪ Não | Controle 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.VisualizarImpostoDeRendapara acessar a tela. Caso contrário, é redirecionado para a página de acesso negado. (Origem:ImpostoRendaLista.aspx.cs, métodoInicializar) - 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étodobtnAtualizarPagina_Click)
5.2. Regras de Habilitação/Desabilitação e Visibilidade
- Expansão de Faixas de IR: O painel
pnlFaixaImpostoRenda(e ogvFaixaImpostoRenda) é 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 (btlTabelaVigentecom valor “1”), o painel é expandido automaticamente na inicialização da tela. (Origem:ImpostoRendaLista.aspx.cs, métodosInicializar,dlImpostoRenda_EditCommand,Expandir_dlImpostoRenda) - Expansão de Faixas de IR PLR: O painel
pnlFaixaImpostoRendaPLR(e ogdvFaixaImpostoRendaPLR) é 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étodosInicializar,dlImpostoRendaPLR_EditCommand,ExpandirPLR_dlImpostoRenda) - Botões de Paginação (uc1:Paginacao):
- Se
TotalResultadosfor 0, todos os botões de navegação (btiPrimeira,btiAnterior,btiProxima,btiUltima), o campotxtNovaPaginae o botãobtnAtualizarPaginasão desabilitados. - Se
PaginaCorrentefor 1:btiPrimeiraebtiAnteriorsão desabilitados. SeTotalPaginasfor maior que 1,txtNovaPagina,btnAtualizarPagina,btiProximaebtiUltimasão habilitados. Caso contrário, são desabilitados. - Se
PaginaCorrentefor igual aTotalPaginas:txtNovaPagina,btnAtualizarPagina,btiPrimeiraebtiAnteriorsão habilitados.btiProximaebtiUltimasão desabilitados. - Em outros casos (páginas intermediárias): todos os botões de navegação,
txtNovaPaginaebtnAtualizarPaginasão habilitados. (Origem:Paginacao.ascx.cs, métodoAjustarBotoesPaginacao) - Dropdown de Tamanho da Página (uc2:TamanhoPaginaGrid): A visibilidade do dropdown (
ddlTamanhoPagina) e dos rótulos (lblTextoParte1,lblTextoParte2) pode ser controlada pela propriedadeEsconderSelecao. SeEsconderSelecaofortrue, os componentes ficam invisíveis. (Origem:TamanhoPaginaGrid.ascx.cs, propriedadeEsconderSelecao)
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áusulaINna query SQL. (Origem:FaixaImpostoRenda_P1.cs, métodosDelete) - 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áusulaINna query SQL. (Origem:ImpostoRenda_P1.cs, métodosDelete)
5.4. Regras de Salvar e Fluxo de Configuração
- Persistência de FaixaImpostoRenda: O método
Save()deFaixaImpostoRendadecide 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étodosSave,Insert,Update) - Persistência de ImpostoRenda: O método
Save()deImpostoRendadecide 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étodosSave,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étodosbtlDtInicioVigencia_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étodoslbtDataInicioVigenciaPLR_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 umDataTablee armazenada emdtPLR. (Origem:ImpostoRendaLista.aspx.cs, métodoCarregarDataListPLR) - Cálculo de Paginação (uc1:Paginacao): O
TotalPaginasé calculado dividindoTotalResultadosporTamanhoPagina. Se houver resto na divisão,TotalPaginasé incrementado em 1. Se aPaginaCorrentefor maior queTotalPaginas(eTotalPaginasnão for zero), aPaginaCorrenteé resetada para 1 e o eventoMudaPaginaé invocado. (Origem:Paginacao.ascx.cs, métodoAjustarPaginacao)
🔄 6. Fluxos Principais
- Inicialização da Tela (
Page_Load):
- Define o título da página como “ImpostoRendaLista”.
- Se não for um postback, chama o método
Inicializar().
- Método
Inicializar():
- Carrega as permissões do usuário logado para a categoria
Enumeradores.CategoriaPermissao.ImpostoRendausandoUsuario.CarregarPermissoes(new Usuario(base.CodigoUsuarioLogado), Enumeradores.CategoriaPermissao.ImpostoRenda). - Verifica se o usuário tem a permissão
Enumeradores.Permissoes.ImpostoDeRenda.VisualizarImpostoDeRenda. Se não tiver, redireciona paraConfiguracao.UrlAcessoNegado. - Define as propriedades
ColunaOrdenacaocomo “Dta_Inicio_Vigencia” eDirecaoOrdenacaocomo “DESC” para o IR convencional. - Define as propriedades
ColunaOrdenacaoPLRcomo “DataInicioVigencia” eDirecaoOrdenacaoPLRcomo “DESC” para o IR PLR. - Chama
CarregarDataList()para popular odlImpostoRenda. - Chama
CarregarDataListPLR()para popular odlImpostoRendaPLR. - Itera sobre os itens do
dlImpostoRenda: sebtlTabelaVigente.Textfor “1”, chamaExpandir_dlImpostoRendapara expandir o painel de faixas de IR. - Itera sobre os itens do
dlImpostoRendaPLR: se a data de início de vigência for do ano corrente, chamaExpandirPLR_dlImpostoRendapara expandir o painel de faixas de IR PLR.
- Carregamento da Lista de IR (
CarregarDataList):
- Define o
DataSourcedodlImpostoRendachamandoImpostoRenda.Listar(ColunaOrdenacao, DirecaoOrdenacao). - Chama
dlImpostoRenda.DataBind().
- Carregamento da Lista de IR PLR (
CarregarDataListPLR):
- Instancia
SuperCalcAPIWeb.ServiceSupercalcAPIClient. - Chama
obj.RecuperarFaixasIRRFPLR()para obter os dados do serviço externo. - Desserializa o XML retornado para um
DataTable(dtPLR). - Cria um
DataViewdedtPLRe aplica a ordenação com base emColunaOrdenacaoPLReDirecaoOrdenacaoPLR. - Filtra os dados para obter apenas os valores distintos de
Idf_TabelaIRRFPLR,DataInicioVigenciaeDataFimVigencia. - Define o
DataSourcedodlImpostoRendaPLRcom os dados filtrados. - Chama
dlImpostoRendaPLR.DataBind().
- Ordenação da Lista de IR (
btlDtInicioVigencia_Click,btlDtFimVigencia_Click):
- Inverte a
DirecaoOrdenacao(ASC/DESC) se a coluna clicada for a mesma da ordenação atual. - Define a
ColunaOrdenacaocom base noLinkButtonclicado. - Chama
CarregarDataList().
- Ordenação da Lista de IR PLR (
lbtDataInicioVigenciaPLR_OnClick,lbtDataFimVigenciaPLR_OnClick):
- Inverte a
DirecaoOrdenacaoPLR(ASC/DESC) se a coluna clicada for a mesma da ordenação atual. - Define a
ColunaOrdenacaoPLRcom base noLinkButtonclicado. - Chama
CarregarDataListPLR().
- Visualização das Faixas de IR (
dlImpostoRenda_EditCommand,Expandir_dlImpostoRenda):
- Recupera o
GridView(gvFaixaImpostoRenda) e oPanel(pnlFaixaImpostoRenda) do item clicado. - Se o painel não estiver visível, chama
UIHelper.CarregarGridView(grid, FaixaImpostoRenda.ListarPorImpostoRenda(idImpostoRenda))para popular oGridViewe torna o painel visível. - Se o painel estiver visível, limpa o
GridViewe torna o painel invisível.
- Visualização das Faixas de IR PLR (
dlImpostoRendaPLR_EditCommand,ExpandirPLR_dlImpostoRenda):
- Recupera o
GridView(gdvFaixaImpostoRendaPLR) e oPanel(pnlFaixaImpostoRendaPLR) do item clicado. - Se o painel não estiver visível, filtra o
dtPLRpeloidImpostoRendae chamaUIHelper.CarregarGridViewpara popular oGridViewe torna o painel visível. - Se o painel estiver visível, limpa o
GridViewe torna o painel invisível.
- Eventos de Paginação (uc1:Paginacao):
ucPaginacao_MudarPagina(): ChamaCarregarDataList().ucTamanhoPaginaGrid_MudarTamanhoPagina(): ChamaCarregarDataList().
🔌 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 umIDataReadercom as faixas de imposto de renda para um determinadoidImpostoRenda. Internamente, executa uma consulta SQL inline (SPSELECT) que filtra porIdf_Imposto_Renda. -
Listar(ImpostoRenda objImpostoRenda): Retorna umaList<FaixaImpostoRenda>para um determinado objetoImpostoRenda. Internamente, chamaListarPorImpostoRenda. -
ListarFaixaIRRF(PeriodoCalculo objPeriodoCalculo): Retorna umaList<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 umDictionary<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 entidadeFaixaImpostoRenda. -
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 umDataTablecom as tabelas de imposto de renda, ordenadas pela coluna e direção especificadas. Inclui uma colunavigenteque indica se a tabela está ativa na data atual. Internamente, executa uma consulta SQL inline. -
Listar(): Retorna umaList<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, chamaFaixaImpostoRenda.Listar(objIRRF)eDependenteImpostoRenda.RecuperarValorDeducaoAtivo. -
ListarTodos(): Retorna umDictionary<int, ImpostoRenda>com todas as tabelas de imposto de renda. -
Save(),Insert(),Update(),Delete(): Métodos para persistência de dados (CRUD) da entidadeImpostoRenda. -
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 eDataLists. -
Métodos Relevantes:
-
CarregarGridView(GridView gv, IDataReader dataSource): Popula umGridViewcom dados de umIDataReader. -
CarregarGridView(GridView gv, DataTable dataSource): Popula umGridViewcom dados de umDataTable. -
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 procedureSPSELECTPERMISSOESUSUARIO.
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 porIdf_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 comoucPaginacaoeucPaginacaoPLRpara 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 comoucTamanhoPaginaGrideucTamanhoPaginaGridPLRpara 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étodoInicializar)
10. Aprofundamento — Detalhes Internos de Métodos
Employer.Plataforma.BLL.Usuario
Arquivos:
C:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P1.csC:\Webfopag\Etec.WebFopag\Employer.Plataforma.BLL\Usuario_P2.cs
Métodos
| Método | Assinatura | Propósito |
|---|---|---|
GetParameters | private List<SqlParameter> GetParameters() | Prepara uma lista de parâmetros SQL para operações de insert e update. |
LoadDataReader | private static IDataReader LoadDataReader(int usuario) | Retorna um IDataReader para um registro específico de Usuario. |
LoadDataReader | private static IDataReader LoadDataReader(int usuario, SqlTransaction trans) | Retorna um IDataReader para um registro específico de Usuario, dentro de uma transação. |
LoadDataReader | public 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. |
LoadObject | public static Usuario LoadObject(int usuario) | Retorna uma instância de Usuario a partir do banco de dados. |
LoadObject | public static Usuario LoadObject(int usuario, SqlTransaction trans) | Retorna uma instância de Usuario a partir do banco de dados, dentro de uma transação. |
CompleteObject | public bool CompleteObject() | Completa os atributos da instância atual de Usuario com dados do banco. |
CompleteObject | public bool CompleteObject(SqlTransaction trans) | Completa os atributos da instância atual de Usuario com dados do banco, dentro de uma transação. |
NumeroCPFFormatado | public string NumeroCPFFormatado { get; } | Retorna o CPF do usuário formatado (XXX.XXX.XXX-XX). |
Salvar | public void Salvar(PessoaFisica objPessoaFisica) | Salva um usuário e sua pessoa física associada em uma transação. |
Salvar | public void Salvar(PessoaFisica objPessoaFisica, SqlTransaction trans) | Salva um usuário e sua pessoa física associada dentro de uma transação existente. |
SalvarAuditoria | private 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. |
CompletarInformacoesAuditoria | private 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. |
Insert | private void Insert() | Insere uma nova instância de Usuario no banco de dados, incluindo a criação de UsuarioPerfil e PeriodoPermissao. |
Insert | private 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. |
Save | public void Save(bool auditar = true) | Salva uma instância de Usuario (insere se for nova, atualiza se já existir), com opção de auditar. |
Save | public void Save(SqlTransaction trans) | Salva uma instância de Usuario dentro de uma transação existente, com auditoria. |
Delete | public static void Delete(int usuario) | Exclui um usuário pelo seu ID. |
Delete | public static void Delete(int usuario, SqlTransaction trans) | Exclui um usuário pelo seu ID, dentro de uma transação existente. |
Delete | public static void Delete(List<Usuario> usuario) | Exclui múltiplos usuários por uma lista de objetos Usuario. |
Update | private void Update(bool auditar = true) | Atualiza uma instância existente de Usuario no banco de dados, com opção de auditar. |
Update | private void Update(SqlTransaction trans) | Atualiza uma instância existente de Usuario no banco de dados, dentro de uma transação existente. |
SetParameters | private void SetParameters(List<SqlParameter> parms) | Preenche uma lista de parâmetros SQL com os valores da instância atual de Usuario. |
ExisteCPF | public static Boolean ExisteCPF(decimal numCPF) | Verifica se existe um usuário para o CPF informado. |
RecuperarPorCPF | public static Usuario RecuperarPorCPF(decimal numCPF) | Retorna uma instância de Usuario a partir do banco de dados pelo CPF. |
CarregarObjetoCPF | public static Usuario CarregarObjetoCPF(string CPFUsuario) | Retorna uma instância de Usuario a partir do banco de dados pelo CPF (string). |
CarregarObjetoCPF | public 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. |
ListarPorCPFNomeParcialAutoComplete | public static Dictionary<int, String> ListarPorCPFNomeParcialAutoComplete(string valor, int count) | Lista usuários por CPF ou nome parcial para autocomplete. |
CarregarPermissoes | public 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. |
RelatorioUsuarioSistema | public 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. |
ListaAgrupamentoUsuario | public static List<RelatorioUsuarioSistemaDto> ListaAgrupamentoUsuario(List<decimal> lsCpfUsuario) | Retorna uma lista de DTOs de agrupamento de usuário com base em uma lista de CPFs. |
FormataCelular | private static string FormataCelular(DbDataReader dr) | Formata o número de celular lido de um DbDataReader. |
RetornaQuantidadeUsuarios | public static int RetornaQuantidadeUsuarios(bool? bInternos, bool bAtivos, SqlTransaction tran = null) | Retorna a quantidade de usuários (internos/externos, ativos/inativos). |
CarregarPermissoes | public static Dictionary<int, int> CarregarPermissoes(int _idfUsuario) | Retorna um dicionário de permissões (Idf_Permissao, Idf_Categoria_Permissao) para um usuário. |
TemPermissao | public static bool TemPermissao(int IdfUsuario, Enum IdfPermissao, Enumeradores.Sistema sistema) | Verifica se um usuário tem uma permissão específica em um sistema. |
TemPermissao | public 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. |
CarregarPermissoes | public 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. |
ListarPorCodNomeParcial | public static IDataReader ListarPorCodNomeParcial(string cpf, string nome) | Lista usuários por CPF ou nome parcial. |
ListarPerfilPorUsuario | public static IDataReader ListarPerfilPorUsuario(int idUsuario, DateTime periodo) | Lista perfis de um usuário para um período específico. |
ListarPerfilPorUsuarioSistema | public 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. |
Listar | public static List<Usuario> Listar() | Retorna uma lista de todos os usuários. |
Listar | public static DataTable Listar(string nomeColuna, string direcaoOrdenacao, int paginaCorrente, int tamanhoPagina, out int totalRegistros) | Lista usuários com paginação e ordenação. |
Listar | public 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. |
ListarUsuariosCadastradosFiltro | public 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. |
ListarPermissoesPorUsuario | public 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. |
ListarPermissoesDeVisualizacaoRelatorioESocialPorUsuario | public 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. |
ListarCPFs | public static List<decimal> ListarCPFs() | Retorna uma lista de todos os CPFs de usuários. |
SetInstance | private 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. |
GetNomeCPF | public static string GetNomeCPF(Int64 idfUsuario) | Retorna o ID e CPF de um usuário formatados. |
RelatorioUsuariosPorPerfil | public static void RelatorioUsuariosPorPerfil(int pIdPerfil, List<ReportParameter> param, List<ReportDataSource> dsT) | Preenche dados para um relatório de usuários por perfil. |
CarregarUsuariosFilaAtualizcaoPonto | public static DataTable CarregarUsuariosFilaAtualizcaoPonto(int numeroTentativas) | Retorna usuários na fila de atualização de ponto com base no número de tentativas. |
VerificarFiliaisPonto | public static Dictionary<int, int> VerificarFiliaisPonto(decimal cpfUsuario, SqlTransaction trans) | Verifica as filiais que um usuário tem permissão no sistema de ponto. |
ExibirNomeFormatContaPagar | public static string ExibirNomeFormatContaPagar(int idUsuario) | Retorna o nome formatado de um usuário para o módulo de Contas a Pagar. |
RecuperarFiliaisQueUsuarioTemAcesso | public static DataTable RecuperarFiliaisQueUsuarioTemAcesso(int idfUsuario, int idEmpresa) | Retorna todas as filiais que um usuário tem acesso dentro de uma empresa. |
CarregarPermissaoTela | public static DataTable CarregarPermissaoTela(Usuario usuario, Enumeradores.CategoriaPermissao categoria) | Retorna as permissões de uma tela para um usuário em uma categoria específica. |
AjustarUltimaEmpresaLogada | public static void AjustarUltimaEmpresaLogada(int idfUsuario) | Ajusta a última empresa logada de um usuário se ele não tiver mais acesso a ela. |
PossuiAcesso | public static bool PossuiAcesso(int idfUsuario, int idfEmpresa) | Verifica se um usuário possui acesso a uma empresa. |
ValidaPerfilPrincipal | public static bool ValidaPerfilPrincipal(int idfUsuario) | Valida se o perfil principal de um usuário não é um perfil de “senha master”. |
PerfilUsuarioSistemaSenhaMaster | public 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. |
FilialPadraoDoUsuarioPorEmpresa | public 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. |
CarregarIdentificacaoUsuario | public 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:
- Cria uma nova lista de
SqlParameter. - 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. - 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:
- Recebe uma lista de
SqlParametercomo entrada. - Preenche o
Valuede cada parâmetro na lista com os valores dos atributos da instância atual deUsuario. - Define
_sistemaGeradorcomo uma nova instância deSistemacom o IDEnumeradores.Sistema.webfopag. - Para
_ultimaEmpresa,_sistemaGeradore_idPessoaFisica, se foremnullou não tiverem valor, define o valor do parâmetro comoDBNull.Value. - Condição
!this._persisted(para inserção):
- Define a
Directiondo parâmetro@Idf_UsuariocomoOutput(para receber o ID gerado pelo banco).
- Condição
this._persisted(para atualização):
- Define a
Directiondo parâmetro@Idf_UsuariocomoInput.
- Define
_usuarioGeradorcom o ID do usuário logado (obtido daSession). - Define
Dta_Cadastrocom 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:
- Chama
GetParameters()para obter uma lista de parâmetros SQL vazia. - Chama
SetParameters(parms)para preencher os parâmetros com os dados da instância atual, configurando@Idf_UsuariocomoOutput. - Abre uma nova conexão SQL (
SqlConnection) e inicia uma transação (SqlTransaction). - Executa a consulta SQL
SPINSERT(definida como SQL inline) usandoDataAccessLayer.ExecuteNonQueryCmd. - Recupera o
Idf_Usuariogerado pelo banco de dados (usandoSCOPE_IDENTITY()) e atribui à propriedade_idUsuario. - Limpa os parâmetros do comando.
- Gerencia
UsuarioPerfil:
- Tenta carregar um
UsuarioPerfilexistente para o_idUsuarioe_perfilPrincipal.IdPerfil. - Se não existir, cria um novo
UsuarioPerfil, associa oUsuarioePerfile o salva (objUsuarioPerfil.Save(trans)).
- Gerencia
PeriodoPermissao:
- Tenta carregar um
PeriodoPermissaoexistente para o_idUsuario,_perfilPrincipal.IdPerfile a data atual. - Se existir, define
DataFimcomonulle o salva (objPeriodoPermissao.Save(trans)). - Se não existir, cria um novo
PeriodoPermissao, defineDataIniciocomo a data atual, associa oUsuarioPerfile o salva (objPeriodoPermissao.Save(trans)).
- Define
_persistedcomotruee_modifiedcomofalse. - Comita a transação.
- Chama
AuditoriaEventMapTransaction.IntegrarAuditoriaEventMap(trans)para integrar eventos de auditoria. - 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_Usuarioe 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:
- Auditoria: Se
auditarfortrue:
- Carrega o estado atual do objeto
Usuariodo banco de dados paraPreUpdateAuditoria(para comparação na auditoria). - Chama
CompletarInformacoesAuditoria(PreUpdateAuditoria, null, false)para preencher informações de auditoria do estado anterior.
- Verifica se a instância foi modificada (
_modified). Se não foi, não faz nada. - Abre uma nova conexão SQL (
SqlConnection) e inicia uma transação (SqlTransaction). - Chama
GetParameters()eSetParameters(parms)para preparar os parâmetros. - Executa a consulta SQL
SPUPDATE(definida como SQL inline) usandoDataAccessLayer.ExecuteNonQuery. - Gerencia
UsuarioPerfilePeriodoPermissao: Lógica idêntica à do métodoInsert(), garantindo que o perfil principal e o período de permissão estejam atualizados. - Define
_modifiedcomofalse. - Comita a transação.
- 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 doInsert().
Save(bool auditar = true)
- Lógica:
- Verifica a propriedade
_persisted. - Se
_persistedforfalse(nova instância), chamathis.Insert(). - Se
_persistedfortrue(instância existente), chamathis.Update(auditar). - Se
auditarfortrue, chamaSalvarAuditoria(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()ouUpdate(bool auditar)SalvarAuditoria(Usuario auditoria, SqlTransaction trans = null, bool ehDelete = false, AtividadeAuditoriaDTO atividade = null)
Delete(int usuario)
- Lógica:
- Carrega o objeto
Usuarioantes da exclusão para fins de auditoria (LoadObject(usuario)). - Cria uma lista de
SqlParametere adiciona@Idf_Usuarioe@Idf_Usuario_Gerador. - Define o valor do parâmetro
@Idf_Usuariocom ousuariofornecido. - Define o valor do parâmetro
@Idf_Usuario_Geradorcom o ID do usuário logado (obtido daSession). - Executa a consulta SQL
SPDELETE(definida como SQL inline) usandoDataAccessLayer.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_Geradore em seguida exclui um registro da tabelaTAB_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:
- Verifica se a auditoria está habilitada (
GlobalSettingsSingleton.AuditoriaHabilitada). Se não, retorna. - Determina o
tipoAcao(Insert, Update, Delete, Inativacao, Ativacao) com base emehDeleteeauditoria.PreUpdateAuditoria. Se for um update e o status de inatividade mudou, ajusta otipoAcao. - Condição
tipoAcao != OperacaoEventoMap.Delete:
- Chama
CompletarInformacoesAuditoria(auditoria)para garantir que o objetoauditoriatenha todas as informações necessárias.
- Cria uma nova instância de
AuditoriaQueuecom 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). - Adiciona o
auditoriaQueueaoMongoAcessLayer(provavelmente um sistema de log/auditoria baseado em MongoDB). - Se uma transação (
trans) for fornecida, também adiciona o evento de auditoria à transação (MongoAcessLayer.Instance.AddTransacaoAuditoria). - Em caso de exceção, loga o erro usando
PlataformaLog.LogError.WriteLog. - No bloco
finally, limpa as propriedades de auditoria (PreUpdateAuditoria) do objetoauditoriae 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:
- Cria uma nova lista de inteiros (
permissoes) para armazenar os IDs das permissões. - Cria uma lista de
SqlParametere adiciona@Idf_Categoria_Permissaoe@Idf_Usuario. - Define os valores dos parâmetros com a
categoriaeusuario.IdUsuariofornecidos. - Executa a consulta SQL
SPSELECTPERMISSOESUSUARIO(definida como SQL inline) usandoDataAccessLayer.ExecuteReader. - Itera sobre o
IDataReader(while (dr.Read())):
- Para cada linha, adiciona o valor da coluna “Permissao” (convertido para
int) à listapermissoes.
- Fecha e descarta o
IDataReader. - 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:
- Cria uma lista de
SqlParameterpara@SortExpression,@CurrentPage,@PageSizee@WhereExpression. - Define os valores dos parâmetros com os argumentos fornecidos.
@SortExpressioné uma concatenação denomeColunaedirecaoOrdenacao. - Executa a consulta SQL
SPSELECTPAG(definida como SQL inline) usandoDataAccessLayer.ExecuteReaderDs, que retorna umDataSet. - O
totalRegistrosé obtido da primeira tabela doDataSet(que contém a contagem). - 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:
- Cria uma lista de
SqlParameterpara@CurrentPage,@PageSize,@Idf_Usuarioe@Pesquisa. - Define os valores dos parâmetros.
- Constrói a string
orderBycomnomeColunaedirecaoOrdenacao. - Formata a string SQL
SPSELPERMISSOEScom aorderBy. - Executa a consulta SQL formatada usando
DataAccessLayer.ExecuteReader. - Lê o primeiro resultado do
IDataReaderpara obter ototalRegistros. - Avança para o próximo conjunto de resultados (
dr.NextResult()) que contém os dados das permissões. - Retorna o
IDataReaderposicionado 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:
- Tenta ler a primeira linha do
IDataReader(dr.Read()). - Se houver uma linha:
- Preenche todos os atributos da
objUsuariocom os valores correspondentes doIDataReader, realizando as conversões de tipo necessárias. - Para
_ultimaEmpresa,_sistemaGerador,_idPessoaFisicae_dataCadastro, verificaDBNull.Valueantes de converter. - Instancia objetos
Perfil,Empresa,UsuarioeSistemapara as propriedades relacionadas. - Define
_persistedcomotruee_modifiedcomofalse. - Retorna
true.
- Se não houver linha para ler, retorna
false. - Em caso de exceção durante a leitura/conversão, relança a exceção.
- No bloco
finally, sebDisposefortrue, descarta oIDataReader(dr.Dispose()).
- Propósito: É um método auxiliar fundamental para mapear os resultados de uma consulta SQL para um objeto
Usuario. O parâmetrobDisposepermite controlar se oIDataReaderdeve ser descartado, útil quando o leitor é usado em um loop externo.
Stored Procedures
| Nome | Parâmetros | Propó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_Usuario | Atualiza 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_Usuario | Atualiza o Idf_Usuario_Gerador e em seguida exclui um registro da tabela TAB_Usuario. |
SELECT * FROM TAB_Usuario WHERE Idf_Usuario = @Idf_Usuario | @Idf_Usuario | Recupera um registro específico da tabela TAB_Usuario. |
SELECT ROW_NUMBER() OVER (ORDER BY {colunaOrdenacao} {direcaoOrdenacao}) AS RowID, Usu.Idf_Usuario, ... FROM TAB_Usuario Usu | colunaOrdenacao, 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, @Pesquisa | 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. |
SELECT * FROM (...) AS TAB (parte da SPSELPERMISSOESVISUALIZACAOESOCIAL) | @IdF_Usuario | Seleciona 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, @WhereExpression | Consulta 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, @Status | Seleciona 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, @Status | Seleciona 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_Perfil | Seleciona usuários por perfil para relatório, formatando CPF e celular. |
SELECT * FROM TAB_Usuario WHERE Num_CPF = @Num_CPF | @Num_CPF | Seleciona um usuário pelo CPF. |
SELECT DISTINCT Usu.Num_CPF FROM TAB_Usuario Usu | Nenhum | Seleciona 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_Periodo | Seleciona 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_Permissao | Retorna 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_CPF | Seleciona 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_Pessoa | Seleciona 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_Tentativas | Seleciona 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_CPF | Verifica 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_Usuario | Retorna 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_Empresa | Retorna 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_Permissao | Retorna 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_Empresa | Verifica 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_Usuario | Retorna 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_Sistema | Verifica 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_Empresa | Retorna 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_Usuario | Retorna 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