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. ?>

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)


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...