O módulo de menus define o menu principal do sistema que dá acesso aos módulos para cada perfil.

Histórico

A configuração de módulos dentro do cadastro de perfis foi criada para permitir que um usuário consiga definir os módulos que cada perfil pode acessar dentro do sistema.

Originalmente o menu do sistema era fixo. E, posteriormente, foi criado de forma fixa no código a lista de módulos para cada perfil, para cada cliente. Esse formato acabava provocando muitos tickets de suporte e patches para ajustes dos acessos de cada cliente.

Descrição

A lista dos módulos liberados para cada perfil é definida no cadastro de perfis. Todos os módulos do sistema aparecem nesta lista com uma configuração informando de está liberado ou não para cada perfil.

Cada perfil possui uma lista de perfis administradores. Que é a lista dos perfis que definem os módulos e os menus dos perfis administrados. Por exemplo, o perfil COMERCIAL pode ser administrado pelo perfil SUPERVISOR_COMERCIAL e DIRETORIA, se estes dois perfis estiverem nesta lista.

O sistema não possui uma forma de customização do menu, exceto pela visibilidade de um módulo a partir do perfil. Isso significa que a posição dos módulos dentro do menu é fixa e igual para todos os perfis que possuem acesso aquele módulo.

O menu principal é definido pela lista de pacotes definidas em DAF_PACKAGE. O campo MENU_ORDER nesta tabela define a ordem dos menus principais do sistema.

São três tipo de item de menu que o modelo de dados permite:

  • -PERFIL_MENU_TIPO_MENU = 1: Item de menu apenas de texto, sem ação;- Não há suporte a isso no sistema atualmente!
  • PERFIL_MENU_TIPO_SEPARADOR = 2: Separador de item de menu, sem ação;
  • PERFIL_MENU_TIPO_ACAO = 3: Item de menu com ação/módulo associado. Hoje o sistema utiliza fixo a ação GERENCIA para criar o menu;

No RegActions.pas o sistema faz uma consulta pela query PERFIL_MENU.MENU_CONFIG para buscar a lista dos módulos que o perfil indicado por parâmetro possui e aí sim criar o menu.

Na tabela DAF_MODULO os seguintes campos definem os seguintes comportamentos relacionados ao menu:
* ID_PACKAGE_MAIN - Indica qual o package principal do módulo (em qual menu estará);
* PERMITE_MENU - Indica que deve ser criado um item de menu para este módulo;
* IS_MENU_CONFIG - Quando preenchido com o valor 1 indica que deve ser criado no subgrupo Configurações;
* MENU_TAG - É apenas um inteiro para agrupar os itens de menu de mesma tag entre separadores;
* MENU_ORDER - Indica a ordem do item de menu dentro do seu grupo de tag;
* MENU_SUBGROUP - Indica o subgrupo do menu. Para quando não é o Configurações;

Modelo de Dados

  • Tabela PERFIL_MODULO - Representa a configuração dos módulos para cada perfil;
  • Tabela PERFIL_ADMINISTRADOR - Representa a lista dos perfis que administram cada perfil;

Regras de Negócio

  • Apenas os perfis administradores podem gerenciar os módulos e os menus de cada perfil;
  • Um perfil pode ser administrador dele mesmo;

Ideias para o Futuro

  • Permitir níveis de menu infinitos de acordo com o modelo de dados;
  • Essa ideia é questionável, pois o menu com dois níveis sempre atendeu e um menu com muitos níveis fica com uma usabilidade prejudicada;
  • O frmMain e a interface da aplicação do Gestor Desktop que implementa o gerenciador de menus do Gestor já foi criada com este conceito de grupo e subgrupo. Seria necessário um refactoring desta parte na aplicação e uma revisão no banco de dados para se manter os menus dos usuários sem alteração na primeira versão com suporte a multinível de menu;
  • O IS_MENU_CONFIG foi criado para que o subgrupo Configurações possuísse sempre o mesmo label e evitar erros de digitação. Na verdade ele poderia vir do arquivo de idiomas e não ter este campo. Cada módulo define no MENU_SUBGROUP como deve ser configurado;
  • Criar uma forma de definir a ação diferenciada (não GERENCIA para o módulo). Creio que isso talvez resolva a lista de problemas a seguir;

Problemas para Resolver

  • Vendedor Indicadores - É uma query de um módulo que tem uma gerência e controller próprios. Acho que só resolveremos o menu no banco desse caso com o cadastro das ações, ou com a seleção da query a partir do menu;
  • Constant Contact - É um frame avulso;
  • ActionCfgSistemaCadastro - É um frame avulso de configuração avançada de cadastros. Deveria ficar logo abaixo do Cadastros / Configurações no mesmo separador;
  • Item Hierarquia - É uma query de um módulo, semelhante ao vendedor indicadores;
  • ActionCfgSistemaItem - Idem cfgsistemcadastro mas de itens;
  • TCfgSistemaComercial_Action
  • TProducaoCfgSistemaAction
  • V_NOTA_FISCAL_ENTRADA_ED.GERENCIA está caindo no GERENCIA_ETIQUETA (quando arrumar tem que ter os dois). Acho que é uma confusão no controller list pois o model das etiquetas deriva do model das notas de entrada;
  • TActionListaPreco
  • VendasVendedoresController que usa o mesmo model de vendedores;
  • TVendasClienteSinteticoModel
  • TVendasClienteAnaliticoController
  • TVendasTotaisClienteAnoController
  • TVendedorVendasController
  • TClientesProdutoController
  • TItemPeriodoController
  • TItemPaiPeriodoController
  • TItemPaiEmbalagemController
  • TPlacarGeralComercialDiarioController
  • TPlacarGeralComercialSemanalController
  • TPlacarGeralComercialMensalController
  • TProdutoEmbalagemController
  • TRelatorioNotaFiscalController
  • TRelatorioEstoqueController