Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TDBCombo através de um Agregação Pessoal boa tarde, Tenho o seguinte cenário, meu sistema precisa realizar apontamento de despesas por projetos. No caso em cada projeto eu digo quais usuários tem permissão para apontar naquela projeto. Logo eu tenho as seguintes tabelas: SYSTEM_USER, PROJETO, PROJETO_USUARIO (id, projeto_id, usuario_id) e APONTAMENTO_DESPESA (id, projeto_id, usuario_id). Suponhamo...
HA
TDBCombo através de um Agregação  
Pessoal boa tarde,

Tenho o seguinte cenário, meu sistema precisa realizar apontamento de despesas por projetos. No caso em cada projeto eu digo quais usuários tem permissão para apontar naquela projeto. Logo eu tenho as seguintes tabelas: SYSTEM_USER, PROJETO, PROJETO_USUARIO (id, projeto_id, usuario_id) e APONTAMENTO_DESPESA (id, projeto_id, usuario_id).

Suponhamos que tenho 3 projetos cadastrados, A, B e C. E o usuário tenha permissão apenas nos projetos A e B. Minha dúvida é como faço para que no apontamento de despesa que tem um TDBCombo para projeto_id eu traga apenas os projetos que ele tem permissão. Lembrando que na tabela de agregação só tenho os id's de usuário e projeto, não tenho o nome do projeto. Estou com dificuldade para realizar esse vínculo, olhar na tabela de agregação e trazer o valor correspondente na tabela pai.

Agradeço!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


NR

Crie um TCriteria com subselect:
  1. <?php
  2. $crit = new TCriteria();
  3. $crit->add(new TFilter('id','in','(SELECT projeto_id from projeto_usuario where usuario_id = ' TSession::getValue('userid') . ')'));
  4. $combo = new TDBCombo('projeto_id','database','Projeto','id','nome_projeto','nome_projeto',$crit);
  5. ?>
HA

Obrigado Nataniel, acabou me dando uma luz de como resolver, acabei fazendo num método, pois queria reaproveitar no filtro da listagem. Então usei um TCombo comum e através de um foreach passei os itens.

  1. <?php
  2. public function getUserProject()
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('statement');
  7.             $repository = new TRepository('ProjectUser');
  8.             $criteria = new TCriteria;
  9.             $criteria->add(new TFilter('user_id''='TSession::getValue('userid')));
  10.             $system_user_user_projects $repository->load($criteria);
  11.             if ($system_user_user_projects)
  12.             {
  13.                 foreach ($system_user_user_projects as $system_user_user_project)
  14.                 {
  15.                     $projects[] = new Project$system_user_user_project->project_id );
  16.                 }
  17.             }
  18.             TTransaction::close();
  19.             return $projects;
  20.         }
  21.         catch(Exception $e)
  22.         {
  23.             new TMessage('error'$e->getMessage());
  24.         }
  25.     }
  26. ?>