Mestre Detalhe getId no Detalhe Olá pessoal, estou fazendo um cadastro de Cliente e como detalhes: os endereços, contatos, e-mails... Ocorre que no endereço, eu estou listando as ruas em um TCombo de acordo com a cidade, mas não estão todas as ruas cadastradas. Seriam cadastradas de acordo com o uso. A interação dinâmica do TCombo entre Uf, município, ruas e bairros está funcionando adequadamente. O que não consegui...
LF
Mestre Detalhe getId no Detalhe  
Olá pessoal, estou fazendo um cadastro de Cliente e como detalhes: os endereços, contatos, e-mails...
Ocorre que no endereço, eu estou listando as ruas em um TCombo de acordo com a cidade, mas não estão todas as ruas cadastradas. Seriam cadastradas de acordo com o uso. A interação dinâmica do TCombo entre Uf, município, ruas e bairros está funcionando adequadamente.
O que não consegui é inserir um botão para adicionar a rua ou bairro, caso ainda não estejam cadastrados.
O Botão eu consegui colocar, chama um TInputDialog que também funciona.

A dificuldade consiste em verificar o Id da linha de detalhe que cliquei no botão para que possa realizar um reload (que já preparei para conseguir alimentar dinâmicamente) no combo da linha de detalhe.

Tentei usar o getId, mas ele só funciona para a primeira linha no caso da ação do botão. Pois quando clico no botão adicionar nova linha, ele clona a row anterior da tabela detalhes, e este método javascript não está atualizando o TButton. Assim, ele herda todas as características.

O mesmo acontece quando tento pegar o row, através do $this->endereco_row, pois este parâmetro também não é atualizado na clonagem da row prévia.

Resumindo. Tenho uma tabela de detalhes e preciso inserir um item no TCombo específico de uma linha. Eu preciso, de alguma forma, identificar a linha ou a uniqid que está atribuída àqueles campos.

Pensei em fazer uma alteração no js para ele informar o id no TButton, depois conseguiria tratar o TButton.

Socorro aos colegas de plantão.

 
  1. <?php
  2. $action_novoLogradouro = new TAction(array($this,'onNovoLogradouro'));
  3. $button_novoLogradouro = new TButton('button_novoLogradouro');
  4. $button_novoLogradouro->setAction($action_novoLogradouro);
  5. $button_novoLogradouro->setImage('ico_add.png');
  6. $action_novoBairro = new TAction(array($this,'onNovoBairro'));
  7. $button_novoBairro = new TButton('button_novoBairro_'.$this->row);
  8. $button_novoBairro->setAction($action_novoBairro,'');
  9. $button_novoBairro->setImage('ico_add.png');
  10. $row = $this->table_enderecos->addRow();
  11. // add cells
  12. $row->addCell($endereco_id);
  13. $row->addCell($endereco_tipo_id);
  14. $row->addCell($estado_id);
  15. $row->addCell($municipio_id);
  16. $row->addMultiCell($logradouro_id, $button_novoLogradouro);
  17. $row->addCell($endereco_numero);
  18. $row->addMultiCell($bairro_id, $button_novoBairro);
  19. $row->addCell($endereco_complemento);
  20. ?>


Parte que chama o TInputDialog
 
  1. <?php
  2. /**
  3. * Open an input dialog
  4. */
  5. public static function onNovoLogradouro( $param )
  6. {
  7. $form = new TQuickForm('logradouro_form_add');
  8. $form->style = 'padding:20px';
  9. $add_logradouro_tipo = new TDBCombo('add_logradouro_tipo', 'labqualita', 'LogradouroTipo', 'logradouro_tipo_id', 'logradouro_tipo_nome', 'logradouro_tipo_nome');
  10. $add_logradouro_nome = new TEntry('add_logradouro_nome');
  11. $add_logradouro_observacao = new TText('add_logradouro_observacao');
  12. $form->addQuickField('Tipo', $add_logradouro_tipo, 150 , new TRequiredValidator);
  13. $form->addQuickField('Nome', $add_logradouro_nome, 350 , new TRequiredValidator);
  14. $form->addQuickField('Observação', $add_logradouro_observacao);
  15. $add_logradouro_observacao->setSize('350', '50');
  16. $actionSave = new TAction(array('EnderecoForm', 'onSaveLogradouro'));
  17. $actionSave->setParameter('add_logradouro_estado', $param['estado_id']);
  18. $actionSave->setParameter('add_logradouro_municipio', $param['municipio_id']);
  19. $actionSave->setParameter('form', 'logradouro_form_add');
  20. $form->addQuickAction('Salvar', $actionSave, 'ico_save.png');
  21. // Force UpperCase
  22. foreach ($form->getFields() as $key => $value)
  23. {
  24. if($value instanceof TEntry)
  25. {
  26. ${$key}->forceUpperCase();
  27. }
  28. }
  29. // show the input dialog
  30. new TInputDialog('Adicionar Logradouro', $form);
  31. }
  32. ?>

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 (2)


FC

Tenho um rotina bem parecida onde dentro do detalhe do datagrid eu tenho link (figura font-awsone) para direcionar ou abrir uma nova página, mas acho que o que vc está querendo é bem parecido com o onReload dessa pagina www.adianti.com.br/framework_files/tutor/index.php?class=SaleForm

Para pegar a linha clicada use na sua função.
$pos = $this->datagrid->getRowIndex('id', $param['key']);
LF

O Felipe, muito obrigado pelo feedback. Eu não mencionei que era o Mestre Detalhe Vetorial, perdão.
Por isto não conseguia usar o getRowIndex.

Mas, como não consegui, acabei indo para o Mestre Detalhe.

A princípio está bem mais simples de implementar...