Como habilitar e desabilitar o botão Novo. Boa Tarde a todos Estou iniciando meu aprendizado com o framework, depois de quase 40 anos de desenvolvimento para DeskTop, me aventurando a programar para a WEB, depois que um amigo me indicou o Adianti. Depois de assistir todos os videos comecei um projeto converte um sistema que fiz em Delphi para PHP. Me deparei com o seguinte problema, preciso que o usuário só insira determinado numero d...
DA
Como habilitar e desabilitar o botão Novo.  
Boa Tarde a todos
Estou iniciando meu aprendizado com o framework, depois de quase 40 anos de desenvolvimento para DeskTop, me aventurando a programar para a WEB, depois que um amigo me indicou o Adianti.
Depois de assistir todos os videos comecei um projeto converte um sistema que fiz em Delphi para PHP.
Me deparei com o seguinte problema, preciso que o usuário só insira determinado numero de registros, quando atingir o botão de novo fique desabilitado, a principio conseguir fazer na inclusão, porém ao deletar o registro o botão não volta a ficar habilitado, tendo que pressionar o botão de busca para liberar, é algo de atualização que não consegui resolver, apesar de pesquisar bastante.

Consegui o bloqueio colocando essas linhas no formlist
 
  1. <?php
  2. // bloqueia botão novo quando numeroregistro = 1
  3. try
  4. {
  5. TTransaction::open('advday');
  6. $countreg = EscritorioJuridico::count();
  7. TTransaction::close();
  8. if($countreg = 1){
  9. TButton::disableField('form_search_EscritorioJuridico', 'btn_novo');
  10. }
  11. else
  12. {
  13. TButton::enableField('form_search_EscritorioJuridico', 'btn_novo');
  14. }
  15. }
  16. catch (Exception $e)
  17. {
  18. new TMessage('error', $e->getMessage());
  19. }
  20. ?>


Porém na exclusão não é atualizado, gostaria de alguma dica de como poderia resolver o problema. Em anexo o fonte do formlist.

Desde já agradeço pela atenção e estou gostando do framework, um bom desafio pela frente.

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


DA

Apenas corrigindo o fonte enviado! Quando enviei não notei que era uma das tentativas em acertar. grato.
 
  1. <?php
  2. try
  3. {
  4. TTransaction::open('advday');
  5. $countreg = EscritorioJuridico::count();
  6. TTransaction::close();
  7. }
  8. catch (Exception $e)
  9. {
  10. new TMessage('error', $e->getMessage());
  11. }
  12. if($countreg > 0){
  13. TButton::disableField('form_search_EscritorioJuridico', 'btn_novo');
  14. }
  15. else
  16. {
  17. TButton::enableField('form_search_EscritorioJuridico', 'btn_novo');
  18. }
  19. ?>
NR

A verificação está sendo feita no construtor da classe, que é sempre o primeiro método chamado. Com isso, ao deletar, primeiro passa pelo construtor(o delete ainda não foi feito e com isso a validação falha) e somente depois passa pela função delete.

Você pode reescrever a função delete(copie de AdiantiStandardListTrait) em sua classe e adicionar a validação também nessa função.
Outra saída seria fazer a verificação na função onReload.
NR

A verificação está sendo feita no construtor da classe, que é sempre o primeiro método chamado. Com isso, ao deletar, primeiro passa pelo construtor(o delete ainda não foi feito e com isso a validação falha) e somente depois passa pela função delete.

Você pode reescrever a função delete(copie de AdiantiStandardListTrait) em sua classe e adicionar a validação também nessa função.
Outra saída seria fazer a verificação na função onReload.
DA

Obrigado Nataniel, optei em reescrever a função delete e também criei uma função para não repetir o código. Agradecido pela valiosa dica.

Quem tiver essa necessidade pode seguir o exemplo.

Ficou assim o tratamento.
 
  1. <?php
  2. /**
  3. * LImita Numero de Registros ($recs = Quantidade desejada menos 1)
  4. */
  5. public function LimitaRecords($recs){
  6. $countreg = 0;
  7. try
  8. {
  9. TTransaction::open('advday');
  10. $countreg = EscritorioJuridico::count();
  11. TTransaction::close();
  12. }
  13. catch (Exception $e)
  14. {
  15. new TMessage('error', $e->getMessage());
  16. }
  17. if($countreg > $recs){
  18. TButton::disableField('form_search_EscritorioJuridico', 'btn_novo');
  19. }
  20. else
  21. {
  22. TButton::enableField('form_search_EscritorioJuridico', 'btn_novo');
  23. }
  24. }
  25. /**
  26. * method Delete()
  27. * Delete a record
  28. */
  29. public function Delete($param)
  30. {
  31. try
  32. {
  33. // get the parameter $key
  34. $key=$param['key'];
  35. // open a transaction with database
  36. TTransaction::open($this->database);
  37. $class = $this->activeRecord;
  38. // instantiates object
  39. $object = new $class($key);
  40. // deletes the object from the database
  41. $object->delete();
  42. //LimitaRecords
  43. $this->LimitaRecords(1);
  44. // close the transaction
  45. TTransaction::close();
  46. // reload the listing
  47. $this->onReload( $param );
  48. // shows the success message
  49. new TMessage('info', AdiantiCoreTranslator::translate('Record deleted'));
  50. }
  51. catch (Exception $e) // in case of exception
  52. {
  53. // shows the exception error message
  54. new TMessage('error', $e->getMessage());
  55. // undo all pending operations
  56. TTransaction::rollback();
  57. }
  58. }
  59. ?>


Na classe principal coloquei também a chamada da função
 
  1. <?php
  2. // add the search form actions
  3. $btn = $this->form->addAction(_t('Find'), new TAction([$this, 'onSearch']), 'fa:search');
  4. $btn->class = 'btn btn-sm btn-primary';
  5. $btn2 = $this->form->addAction(_t('New'), new TAction(['EscritorioJuridicoForm', 'onEdit'], ['register_state' => 'false']), 'fa:plus green');
  6. $btn2->class = 'btn btn-sm btn-default';
  7. // bloqueia botão novo quando numeroregistro > 1
  8. $this->LimitaRecords(1);
  9. // creates a Datagrid
  10. $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  11. $this->datagrid->style = 'width: 100%';
  12. ?>