Dúvida no componente TDBSeekButton Estou utilizando o componente TDBSeekButton que funciona perfeitamente, trazendo o resultado selecionado para o campo desejado, como mostro ...
JF
Dúvida no componente TDBSeekButton  
Fechado
Estou utilizando o componente TDBSeekButton que funciona perfeitamente, trazendo o resultado selecionado para o campo desejado, como mostro

 
  1. <?php
  2. {...}
  3. 2119pessoa = new ">TDBSeekButton( 'idpessoa',
  4. 'cia',
  5. 'form_Contrato',
  6. 'pessoa',
  7. 'pessoa',
  8. 'idpessoa',
  9. 'pessoa');
  10. $pessoa = new TEntry('pessoa');
  11. {...}
  12. ?>


Até ai tudo bem. O problema é quando eu ABRO um formulário em modo EDIÇÃO o campo $pessoa está em branco e eu preciso de algo tipo pessoa->pessoa. No tutor, classe FormSeekButtonView não mostra isso, somente como salva. Acredito que a solução seja no método odEdit, mas como? Qual é a sintaxe?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (10)


AC

Acho que é algo parecido com isso:

www.adianti.com.br/forum/pt/view_2112?associacao
IF

João, é a configuração de associação no seu model. Poste o model principal do seu form pra gente dar uma olhada.
JF

Acho que não é por ai (na classe model), pois utilizo a mesma model em uma List e funciona perfeitamente, como mostro:
 
  1. <?php
  2. // creates the datagrid columns
  3. $column_idcontrato = new TDataGridColumn('idcontrato', 'Nº Contrato', 'right', 50);
  4. // Tudo OK na classe modelo
  5. $column_idpessoa = new TDataGridColumn('pessoa->pessoa', 'Contratante', 'left');
  6. // relacionamento com a tabela pessoa funcionando
  7. $column_idcontratotipo = new TDataGridColumn('contratotipo->contratotipo', 'Tipo de contrato', 'left');
  8. $column_dtinicio = new TDataGridColumn('dtinicio', 'Inicio', 'center', 50);
  9. $column_dtfim = new TDataGridColumn('dtfim', 'Fim', 'center',50);
  10. $column_dtultalteracao = new TDataGridColumn('dtultalteracao', 'Dt. Alteração', 'center', 50);
  11. ?>

Mas eu acho que não estou sendo entendido, então explico melhor:
Tenho um campo TDBSeekButton em um formulário (de contrato) que busca os clientes e joga o NOME dele em um campo (TEntry) Vazio. Até aqui está tudo bem (segui o exemplo da página 133 - Botão de busca de registro). Está salvando o id deste cliente na FK da tabela Contrato, como o esperado.
O problema está na hora da EDIÇÃO dos registros (no livro não mostra). Como editar o campo "Nome do Cliente" se na tabela "Contrato" só tem seu ID?
Acho que a solução está no método onEdit, como mostro na linha 31 aproximadamente:
 
  1. <?php
  2. public function onEdit($param)
  3. {
  4. try
  5. {
  6. TTransaction::open('cia');
  7. if (isset($param['key']))
  8. {
  9. $key = $param['key'];
  10. $object = new Contrato($key);
  11. $items = Contratodetalheitem::where('idcontrato', '=', $key)->load();
  12. $session_items = array();
  13. foreach( $items as $item )
  14. {
  15. $item_key = $item->idcontratodetalheitem;
  16. $session_items[$item_key] = $item->toArray();
  17. $session_items[$item_key]['idcontratodetalheitem'] = $item->idcontratodetalheitem;
  18. $session_items[$item_key]['idcontratodetalhe'] = $item->idcontratodetalhe;
  19. $session_items[$item_key]['detalhe'] = $item->contratodetalhe->contratodetalhe;
  20. $session_items[$item_key]['contratodetalheitem'] = $item->contratodetalheitem;
  21. }
  22. TSession::setValue(__CLASS__.'_items', $session_items);
  23. $this->form->setData($object); // fill the form with the active record data
  24. // ------------------------------------------------------------------------
  25. // deveria preencher o campo. não dá erro mas o campo NÃO é preenchido
  26. $this->form->contratante = $object->pessoa->pessoa;
  27. // ------------------------------------------------------------------------
  28. $this->onReload( $param ); // reload items list
  29. TTransaction::close(); // close transaction
  30. }
  31. else
  32. {
  33. $this->form->clear();
  34. TSession::setValue(__CLASS__.'_items', null);
  35. $this->onReload( $param );
  36. }
  37. }
  38. catch (Exception $e) // in case of exception
  39. {
  40. new TMessage('error', $e->getMessage());
  41. TTransaction::rollback();
  42. }
  43. }
  44. ?>
AC

Mas daí nesse caso tu não edita o nome do cliente no formulário de contrato. Tu edita no formulário de cliente. Como está relacionado, vai "alterar" automaticamente lá na outra. No formulário de contrato no máximo tu alterada o cliente para outro (obviamente desconheço a regra do negócio mas acredito que após firmado o contrato o sistema não deveria deixar alterar o cliente(ou deixar somente para um usuário muito 'privilegiado")). O TEntry com o nome do cliente eu até aconselho a deixar setEditable(false).

Agora que me liguei que tu é do baita chão.

Abraço.
JF

MAS BAH, TCHÊ! Não me perguntes onde fica o Alegrete!!!
Alexandre, você tem toooda a razão! Eu não quero editar o nome do contratante no formulário do contrato, eu só quero exibi-lo, mas como fazer quando o contrato está em edição?
Pouco sei de POO (venho da estruturada), mas acredito que deveria ter algo como $this->form->contratante = $object->pessoa->pessoa; no método onEdit</>. Isso não causa erro, mas não preenche o campo :(
as tabelas em resumo são assim:

Tabela pessoa: idpessoa -- PK pessoa -- varchar {..} Tabela contrato idcontrato - PK idpessoa - FK dtcontrato - date {..}


PS: Eu conheço alguns FERREIRA DA COSTA, vizinhos meus. Vc. é desta família? (também procurei vc no Face, mas acho que seu perfil é um que está bloqueado. kkkk)
AC

Deve estar faltando algo tipo isso no teu model de contrato:

 
  1. <?php
  2. public function get_pessoa()
  3. {
  4. if (empty($this->pessoa))
  5. {
  6. $this->pessoa = new Pessoa( $this->idpessoa );
  7. }
  8. return $this->pessoa->pessoa;
  9. }
  10. ?>


Estou começando também, então pode ter algum erro nesse trecho que postei, mas é por aí.

PS: Da uma olhada no teu e-mail.
PD

Quando houver uma seek com campos "city_id" e "city_name" (por exemplo), vc precisa fazer um get_city_name() na model.
Assim, quando carregar o objeto, virá o nome junto...:

 
  1. <?php
  2. $city_id = new ">TDBSeekButton('city_id', 'samples', 'form_seek_sample', 'City', 'name', 'city_id', 'city_name');
  3. ?>


Att,
PD

Duas soluções:

1) Preencher o atributo complementar no onEdit() do form;

2) Criar na model que você está editando um método get_outrocampo(), explico:

Ex: No cadastro de clientes, tem uma seek para cidades. Basta fazer um get_city_name() na model de clientes:
 
  1. <?php
  2. $city_id = new ">TDBSeekButton('city_id', 'samples', 'form_seek_sample', 'City', 'name', 'city_id', 'city_name');
  3. $city_name = new TEntry('city_name2');
  4. ?>


Assim, já virá o objeto pronto na edição,

Att,
IG

 
  1. <?php
  2. $city_id = new ">TDBSeekButton('city_id', 'samples', 'form_seek_sample', 'City', 'name', 'city_id', 'city_name');
  3. $city_name = new TEntry('city_name2');
  4. ?>


neste exemplo Pablo, como eu faria para exibir o estado da cidade, o sigla, pois poderia ter mais de uma cidade com o mesmo nome??
PP

Estou tendo o mesmo problema mas não consegui solucionar.