FF
Filtro por grupo
Boa tarde pessoal!
Estou com a seguinte situação. Criei um tela, onde é carregado dados da sessão para preenchimento de alguns campos, e um filtro pra que seja exibido somente os pedidos daquele usuário. O detalhe é que quero que este filtro aplique-se somente aos usuários do grupo Standard por exemplo, para que o administrador tenha acesso todos os pedidos. O filtro que é o seguinte:
Conto com o apoio!
Estou com a seguinte situação. Criei um tela, onde é carregado dados da sessão para preenchimento de alguns campos, e um filtro pra que seja exibido somente os pedidos daquele usuário. O detalhe é que quero que este filtro aplique-se somente aos usuários do grupo Standard por exemplo, para que o administrador tenha acesso todos os pedidos. O filtro que é o seguinte:
- <?php
- try
- {
- TTransaction::open('landini');
- $cli = SystemUser::where('id','=',TSession::getValue('userid'))->first();
- $criteria = new TCriteria;
- $criteria->add(new TFilter('system_user_id','=',$cli->id));
- TTransaction::close();
- }
- catch(Exception $e)
- {
- new TMessage('error',$e->getMessage());
- }
- ?>
Conto com o apoio!
Talvez tenha que verificar se o usuário não pertença ao grupo 1, que normalmente é o grupo dos administradores:
Fala awe Marcelo, sempre na ativa heiim!!
Cara vamos lá, no caso eu quero que o filtro se aplique somente aos usuários que não fazem parte do grupo admin, no caso de id 1, considerando que o script que passou ja está em negação, basta completar com o filtro
Antecipadamente agradeço!
Fiz aqui, deu certinho, agora os membros do grupo administrador veem tudo e os demais grupos não. Caso queira clonar o grupo administrador, é só adicionar o id correspondente na lina
Exemplo:
Legal que consegui ajudar!
Basicamente é isso.
Claro que dá pra melhorar a lógica, caso o grupo seja outro.
Mas se usar o mesmo formato que vem por padrão, seria este o caminho.
Sucesso.
Vamos la na listagem tudo certo, porém me deparei com um impasse. Os metodos onEdit e onSave do formulário, tem a carga da sessão do usuário, ou seja ao clicar no editar na datagrid, alguns campos vem da sessão e não do banco. Precisaria que no caso, quando do grupo administrador, este filtro fosse ignorado. Atualmente está assim:
o onEdit assim:
Se eu pedir pra editar, o que no caso será necessário para alteração do campo situacao, e este só poderá ser editavel por um administrador, por estar carregando dados de sessão, o usuário nos campos será alterado e ao clicar em salvar o cliente será alterado para o usuário administrador.
Alguma dica pra contornar esta situação?
É preciso separar as coisas.
Quando você está incluindo um novo registro, o else do onEdit será acionado, certo?
Bem, neste momento os campos que precisam ser definidos dinamicamente por dados da Sessão, serão atribuídos aos campos. Ok?
Quando você edita, ele entrará no onEdit, onde os dados a serem carregados na tela, passarão a ser os dados do banco.
Portanto qualquer "store" que der a partir de um registro carregado, os dados em memórias serão os que estão vindo do banco.
Você não poderia, a não ser que seja regra do negócio, carregar os dados dinamicamente ao receber um ID para editar um registro.
Outra dica, quando vc se loga, os dados da sessão que foram gravados no login, ficam na memório não necessitando que seja carregados novamente, como você faz no "else" do onEdit.
Não sei se fui claro? Se ajudei, ou não!
É preciso separar as coisas.
Justamente o que to quebrando a cabeça....rsrsrs
Quando você está incluindo um novo registro, o else do onEdit será acionado, certo?
Certo!
Bem, neste momento os campos que precisam ser definidos dinamicamente por dados da Sessão, serão atribuídos aos campos. Ok?
Exatamente.
Quando você edita, ele entrará no onEdit, onde os dados a serem carregados na tela, passarão a ser os dados do banco.
Portanto qualquer "store" que der a partir de um registro carregado, os dados em memórias serão os que estão vindo do banco.
Deixa eu ver se intendi. Então mesmo que nos campos que são dinamicamente carregados na sessão ao clicar no onEdit, quando clicar no Salvar, os dados que serão salvos serão os que ja estavam nas tabelas do banco, e não os que foram carregados da sessão? É isso?
Você não poderia, a não ser que seja regra do negócio, carregar os dados dinamicamente ao receber um ID para editar um registro.
O que sugere? No codigo tentei condicionar se o campo 'id' estiver vazio, então carregue do banco, mas acho que a logica não tá muito legal... porque na verdade, deveria ser se não estiver vazio, mas quando adiciono a negação !, os campos ficam vazios.
Outra dica, quando vc se loga, os dados da sessão que foram gravados no login, ficam na memório não necessitando que seja carregados novamente, como você faz no "else" do onEdit.
Como ficaria? Mais ou menos assim:
Não sei se fui claro? Se ajudei, ou não!
O método onEdit possui característica: Uma quando recebe um parâmetro vindo de uma chamada e outra quando não recebe nada e quem chamada gostaria de ver um formulário em branco.
Quando a chamada possui um parâmetro, indica que vamos editar um registro, portanto os dados que vão para o form devem ser preenchidos com os dados de uma tabela.
Quando não possui um parâmetro, e o form precisa de campos default, ai devemos preenchê-los com o que precisamos ou temos, no seu caso estes campos estão na Session.
Vamos a um estrutura de exemplo:
1) A chamada (hipotético): index.php?cllass=ClienteForm&method=onEdit&key=1&id=1
Na chamada acima, estou passando para a pagina que pretendo editar o ID do cliente se existir:
2) Chamada indicando um novo registro: index.php?class=Clienteform&method=onEdit
Vamos ao código:
Quando carregar os dados vindo do BD, o ID será automaticamente preenchido como os demais dados, portanto no onSave, todos os dados que estão no formulário e fazem parte do Model serão salvos como estão, pois serão enviados por POST ao método onSave.
Estou enviando meu e-mail, caso precise de mais detalhes podemos trocar mensagens: marcelo@mgsistemas.com.br
Espero que tenha esclarecido.