Pular para conteúdo

Filtro de Natureza de Operação por Departamento

Task: NH-152 Branch: feature/natureza-operacao-departamento-NH-152

Descrição

Esta funcionalidade implementa o filtro de naturezas de operação baseado no departamento do usuário logado. Isso permite que cada departamento veja apenas as naturezas de operação relevantes para suas atividades.

Comportamento

Regras de Filtragem

  1. Natureza COM departamento configurado: Aparece apenas para usuários do(s) departamento(s) configurado(s)
  2. Natureza SEM departamento configurado: Comportamento controlado pelo parâmetro de sistema 22
  3. Usuário com parâmetro 23 ativo: Vê todas as naturezas (ignora filtro de departamento)

Fluxo de Decisão

Usuário acessa Carteira de Venda ou Ordem de Compra
Verifica Parâmetro 23 do usuário
    ├── TRUE → Retorna TODAS as naturezas ativas
    └── FALSE → Continua filtro
        Para cada natureza:
            ├── TEM departamento configurado?
            │       │
            │       ├── SIM → Departamento do usuário está na lista?
            │       │           │
            │       │           ├── SIM → Inclui natureza
            │       │           └── NÃO → Exclui natureza
            │       │
            │       └── NÃO → Verifica Parâmetro 22 do sistema
            │                   │
            │                   ├── TRUE → Inclui natureza (liberada para todos)
            │                   └── FALSE → Exclui natureza (não aparece para ninguém)
        Lista filtrada de naturezas

Parâmetros de Sistema

Parâmetro 22 - Liberar natureza sem departamento

Campo Valor
ID 22
Nome Liberar natureza de operação para todos quando não houver departamento configurado
Tipo Booleano
Padrão True (configuração de sistema)
Valor Inicial False

Comportamento: - True: Naturezas sem departamento configurado aparecem para todos os usuários - False: Naturezas sem departamento configurado não aparecem para nenhum usuário

Parâmetro 23 - Liberar todas as naturezas para usuário

Campo Valor
ID 23
Nome Liberar todas as naturezas de operação para o usuário (ignora filtro de departamento)
Tipo Booleano
Padrão False (configuração por usuário)
Valor Inicial True (apenas para admin@nelmetais.com.br)

Comportamento: - True: Usuário vê todas as naturezas de operação, ignorando o filtro de departamento - False: Usuário segue as regras de filtragem por departamento

Telas Afetadas

Carteira de Venda (Pedido)

  • Controller: PedidoController.cs
  • Método: AdicionarPedido(), EditarPedido()
  • Campo: Select de Natureza de Operação

Ordem de Compra

  • Controller: OrdemCompraController.cs
  • Método: AdicionarOrdemCompra(), EditarOrdemCompra()
  • Campo: Select de Natureza de Operação

Arquivos Modificados

Models e Enums

  • src/Nelmetais.SGE.Business/Enums/Administrativo/ParametroSistemaEnum.cs
  • Adicionados parâmetros 22 e 23

Interfaces

  • src/Nelmetais.SGE.Business/Interfaces/Cadastros/INaturezaOperacaoRepository.cs
  • Novo método: ObterNaturezasOperacaoPorFuncionalidadeEDepartamento()

Repositories

  • src/Nelmetais.SGE.Data/Repositories/Cadastros/NaturezaOperacaoRepository.cs
  • Implementação do método com lógica de filtro

Controllers

  • src/Nelmetais.SGE.WebApp/Areas/Comercial/Controllers/PedidoController.cs
  • src/Nelmetais.SGE.WebApp/Areas/Comercial/Controllers/OrdemCompraController.cs
  • Integração com o novo método de filtro

Migrations

  • src/Nelmetais.SGE.Data/Migrations/20251129011917_AddParametrosDepartamentoNaturezaOperacao.cs
  • Criação dos parâmetros 22 e 23 no banco de dados

Configuração de Departamento na Natureza de Operação

O campo DepartamentoUtilizacaoIds na entidade NaturezaOperacao armazena os IDs dos departamentos que podem usar aquela natureza.

// Exemplo: Natureza disponível para Vendas (9) e Expedição (3)
naturezaOperacao.DepartamentoUtilizacaoIds = [9, 3];

// Exemplo: Natureza disponível para todos (sem restrição)
naturezaOperacao.DepartamentoUtilizacaoIds = null; // ou []

Como Testar

Cenário 1: Usuário do departamento Vendas

  1. Logar como usuário do departamento Vendas
  2. Acessar Carteira de Venda > Adicionar
  3. Verificar que apenas naturezas configuradas para Vendas aparecem

Cenário 2: Usuário admin com parâmetro 23

  1. Logar como admin@nelmetais.com.br
  2. Acessar Carteira de Venda > Adicionar
  3. Verificar que TODAS as naturezas aparecem

Cenário 3: Parâmetro 22 desativado

  1. Configurar parâmetro 22 como False
  2. Logar como usuário comum
  3. Verificar que naturezas sem departamento NÃO aparecem

Cenário 4: Parâmetro 22 ativado

  1. Configurar parâmetro 22 como True
  2. Logar como usuário comum
  3. Verificar que naturezas sem departamento APARECEM