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.
Parte que chama o TInputDialog
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.
- <?php
- $action_novoLogradouro = new TAction(array($this,'onNovoLogradouro'));
- $button_novoLogradouro = new TButton('button_novoLogradouro');
- $button_novoLogradouro->setAction($action_novoLogradouro);
- $button_novoLogradouro->setImage('ico_add.png');
- $action_novoBairro = new TAction(array($this,'onNovoBairro'));
- $button_novoBairro = new TButton('button_novoBairro_'.$this->row);
- $button_novoBairro->setAction($action_novoBairro,'');
- $button_novoBairro->setImage('ico_add.png');
- $row = $this->table_enderecos->addRow();
- // add cells
- $row->addCell($endereco_id);
- $row->addCell($endereco_tipo_id);
- $row->addCell($estado_id);
- $row->addCell($municipio_id);
- $row->addMultiCell($logradouro_id, $button_novoLogradouro);
- $row->addCell($endereco_numero);
- $row->addMultiCell($bairro_id, $button_novoBairro);
- $row->addCell($endereco_complemento);
- ?>
Parte que chama o TInputDialog
- <?php
- /**
- * Open an input dialog
- */
- public static function onNovoLogradouro( $param )
- {
- $form = new TQuickForm('logradouro_form_add');
- $form->style = 'padding:20px';
- $add_logradouro_tipo = new TDBCombo('add_logradouro_tipo', 'labqualita', 'LogradouroTipo', 'logradouro_tipo_id', 'logradouro_tipo_nome', 'logradouro_tipo_nome');
- $add_logradouro_nome = new TEntry('add_logradouro_nome');
- $add_logradouro_observacao = new TText('add_logradouro_observacao');
- $form->addQuickField('Tipo', $add_logradouro_tipo, 150 , new TRequiredValidator);
- $form->addQuickField('Nome', $add_logradouro_nome, 350 , new TRequiredValidator);
- $form->addQuickField('Observação', $add_logradouro_observacao);
- $add_logradouro_observacao->setSize('350', '50');
- $actionSave = new TAction(array('EnderecoForm', 'onSaveLogradouro'));
- $actionSave->setParameter('add_logradouro_estado', $param['estado_id']);
- $actionSave->setParameter('add_logradouro_municipio', $param['municipio_id']);
- $actionSave->setParameter('form', 'logradouro_form_add');
- $form->addQuickAction('Salvar', $actionSave, 'ico_save.png');
- // Force UpperCase
- foreach ($form->getFields() as $key => $value)
- {
- if($value instanceof TEntry)
- {
- ${$key}->forceUpperCase();
- }
- }
- // show the input dialog
- new TInputDialog('Adicionar Logradouro', $form);
- }
- ?>
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']);
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...