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
- Natureza COM departamento configurado: Aparece apenas para usuários do(s) departamento(s) configurado(s)
- Natureza SEM departamento configurado: Comportamento controlado pelo parâmetro de sistema 22
- 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.cssrc/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
- Logar como usuário do departamento Vendas
- Acessar Carteira de Venda > Adicionar
- Verificar que apenas naturezas configuradas para Vendas aparecem
Cenário 2: Usuário admin com parâmetro 23
- Logar como admin@nelmetais.com.br
- Acessar Carteira de Venda > Adicionar
- Verificar que TODAS as naturezas aparecem
Cenário 3: Parâmetro 22 desativado
- Configurar parâmetro 22 como False
- Logar como usuário comum
- Verificar que naturezas sem departamento NÃO aparecem
Cenário 4: Parâmetro 22 ativado
- Configurar parâmetro 22 como True
- Logar como usuário comum
- Verificar que naturezas sem departamento APARECEM