Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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.         
  8.         $form = new TQuickForm('logradouro_form_add');
  9.         $form->style 'padding:20px';
  10.         $add_logradouro_tipo = new TDBCombo('add_logradouro_tipo''labqualita''LogradouroTipo''logradouro_tipo_id''logradouro_tipo_nome''logradouro_tipo_nome');
  11.         $add_logradouro_nome = new TEntry('add_logradouro_nome');
  12.         $add_logradouro_observacao  = new TText('add_logradouro_observacao');
  13.         $form->addQuickField('Tipo'$add_logradouro_tipo,  150 , new TRequiredValidator);
  14.         $form->addQuickField('Nome'$add_logradouro_nome,  350 , new TRequiredValidator);
  15.         $form->addQuickField('Observação'$add_logradouro_observacao);
  16.         $add_logradouro_observacao->setSize('350''50');
  17.         $actionSave = new TAction(array('EnderecoForm''onSaveLogradouro'));
  18.         $actionSave->setParameter('add_logradouro_estado'$param['estado_id']);
  19.         $actionSave->setParameter('add_logradouro_municipio'$param['municipio_id']);
  20.         $actionSave->setParameter('form''logradouro_form_add');
  21.         
  22.         $form->addQuickAction('Salvar'$actionSave'ico_save.png');
  23.         
  24.         // Force UpperCase
  25.         foreach ($form->getFields() as $key => $value
  26.         {
  27.              if($value instanceof TEntry)
  28.              {
  29.                 ${$key}->forceUpperCase();
  30.             }
  31.         }
  32.         // show the input dialog
  33.         new TInputDialog('Adicionar Logradouro'$form);
  34.     }
  35. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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...