Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Filtro com between datas Olá amigos do fórum, criei um Data Grid com uma tabela de programação de embarque onde a mesma tem um campo 'data_prog' Gostaria de colocar um filtro onde o usuário colocasse data inicial e data final. Procurei nos exemplos do tutor, mas confesso que estou com dificuldade pra fazer isto. Se eu adicionar dois filtros com o campo data_prog usando os operadores >= e ...
CS
Filtro com between datas  
Fechado
Olá amigos do fórum, criei um Data Grid com uma tabela de programação de embarque onde a mesma tem um campo 'data_prog' Gostaria de colocar um filtro onde o usuário colocasse data inicial e data final. Procurei nos exemplos do tutor, mas confesso que estou com dificuldade pra fazer isto. Se eu adicionar dois filtros com o campo data_prog usando os operadores >= e <=, a aplicação acusa um erro dizendo que estou usando o campo data_prog 2 vezes. Perdoem-me pela dúvida, mas venho de outras linguagem de programação e estou começando a me familiarizar com PHP agora.

Segue anexo meu arquivo TblprogList onde funciona apenas com a data inicial usando o operador >=.

Se alguém puder me ajudar neste exemplo desde já agradeço.

Sds,

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)


IF

Charles, vc deve definir duas variáveis para a consulta, como por exemplo $data_inicial e $data_final e seguindo essa lógica a consulta ficaria assim:

 
  1. <?php
  2. $data_inicial = new TDate('data_inicial');
  3. $data_final = new TDate('data_final');
  4. // Para o filtro use BETWEEN
  5. parent::addFilterField('data_prog', 'BETWEEN', $data_inicial, $data_final); // filterField, operator, formField
  6. ?>
CS

Olá Ivan,

Muito obrigado pela ajuda, no primeiro momento ao inserir estas linhas recebi um erro de declaração de variáveis apontando para a linha do filtro.

Declarei as duas variáveis como 'NULL', não deu mais erro, porém não filtra.

Acredito que falta alguma coisa ainda, rsssss coisa de novato mesmo.


 
  1. <?php
  2. /**
  3. * TblprogList Listing
  4. * @author <your name here>
  5. */
  6. class TblprogList extends TStandardList
  7. {
  8. protected $form; // registration form
  9. protected $datagrid; // listing
  10. protected $pageNavigation;
  11. protected $formgrid;
  12. protected $deleteButton;
  13. protected $transformCallback;
  14. /**
  15. * Page constructor
  16. */
  17. public function __construct()
  18. {
  19. parent::__construct();
  20. parent::setDatabase('controle'); // defines the database
  21. parent::setActiveRecord('Tblprog'); // defines the active record
  22. parent::setDefaultOrder('id_prog', 'asc'); // defines the default order
  23. // parent::setCriteria($criteria) // define a standard filter
  24. $data_inicial = 'NULL';
  25. $data_final = 'NULL';
  26. parent::addFilterField('id_prog', '=', 'id_prog'); // filterField, operator, formField
  27. parent::addFilterField('data_prog', 'BETWEEN', $data_inicial, $data_final); // filterField, operator, formField
  28. //parent::addFilterField('data_prog', '=>', $data_inicial); // filterField, operator, formField
  29. //parent::addFilterField('data_prog', '<=', $data_final); // filterField, operator, formField
  30. // creates the form
  31. $this->form = new TQuickForm('form_search_Tblprog');
  32. $this->form->class = 'tform'; // change CSS class
  33. $this->form->style = 'display: table;width:100%'; // change style
  34. $this->form->setFormTitle('Tblprog');
  35. // create the form fields
  36. $id_prog = new TEntry('id_prog');
  37. $data_inicial = new TDate('data_inicial');
  38. $data_final = new TDate('data_final');
  39. // add the fields
  40. $this->form->addQuickField('Id Prog', $id_prog, 50 );
  41. $this->form->addQuickField('data_inicial', $data_inicial, 100 );
  42. $this->form->addQuickField('data_final', $data_final, 100 );
  43. // keep the form filled during navigation with session data
  44. $this->form->setData( TSession::getValue('Tblprog_filter_data') );
  45. // add the search form actions
  46. $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
  47. $this->form->addQuickAction(_t('New'), new TAction(array('TblprogForm', 'onEdit')), 'bs:plus-sign green');
  48. // creates a DataGrid
  49. $this->datagrid = new TDataGrid;
  50. $this->datagrid->style = 'width: 100%';
  51. $this->datagrid->setHeight(320);
  52. // $this->datagrid->datatable = 'true';
  53. // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
  54. // creates the datagrid columns
  55. $column_id_prog = new TDataGridColumn('id_prog', 'Id Prog', 'right');
  56. $column_data_prog = new TDataGridColumn('data_prog', 'Data Prog', 'left');
  57. $column_hora_prog = new TDataGridColumn('hora_prog', 'Hora Prog', 'left');
  58. $column_origem = new TDataGridColumn('origem', 'Origem', 'right');
  59. // add the columns to the DataGrid
  60. $this->datagrid->addColumn($column_id_prog);
  61. $this->datagrid->addColumn($column_data_prog);
  62. $this->datagrid->addColumn($column_hora_prog);
  63. $this->datagrid->addColumn($column_origem);
  64. // create EDIT action
  65. $action_edit = new TDataGridAction(array('TblprogForm', 'onEdit'));
  66. $action_edit->setUseButton(TRUE);
  67. $action_edit->setButtonClass('btn btn-default');
  68. $action_edit->setLabel(_t('Edit'));
  69. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  70. $action_edit->setField('id_prog');
  71. $this->datagrid->addAction($action_edit);
  72. // create DELETE action
  73. $action_del = new TDataGridAction(array($this, 'onDelete'));
  74. $action_del->setUseButton(TRUE);
  75. $action_del->setButtonClass('btn btn-default');
  76. $action_del->setLabel(_t('Delete'));
  77. $action_del->setImage('fa:trash-o red fa-lg');
  78. $action_del->setField('id_prog');
  79. $this->datagrid->addAction($action_del);
  80. // create the datagrid model
  81. $this->datagrid->createModel();
  82. // create the page navigation
  83. $this->pageNavigation = new TPageNavigation;
  84. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  85. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  86. // vertical box container
  87. $container = new TVBox;
  88. $container->style = 'width: 90%';
  89. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  90. $container->add($this->form);
  91. $container->add($this->datagrid);
  92. $container->add($this->pageNavigation);
  93. parent::add($container);
  94. }
  95. }
  96. ?>
</your>
IF

Olá Charles, estranho, realmente com BETWEEN não funcionou tenta com >= e <= como segue:

 
  1. <?php
  2. /**
  3. * TblprogList Listing
  4. * @author <your name here>
  5. */
  6. class TblprogList extends TStandardList
  7. {
  8. protected $form; // registration form
  9. protected $datagrid; // listing
  10. protected $pageNavigation;
  11. protected $formgrid;
  12. protected $deleteButton;
  13. protected $transformCallback;
  14. /**
  15. * Page constructor
  16. */
  17. public function __construct()
  18. {
  19. parent::__construct();
  20. parent::setDatabase('controle'); // defines the database
  21. parent::setActiveRecord('Tblprog'); // defines the active record
  22. parent::setDefaultOrder('id_prog', 'asc'); // defines the default order
  23. // parent::setCriteria($criteria) // define a standard filter
  24. parent::addFilterField('id_prog', 'like', 'id_prog'); // filterField, operator, formField
  25. parent::addFilterField('data_prog', '>=', 'data_inicial'); // filterField, operator, formField
  26. parent::addFilterField('data_prog', '<=', 'data_final'); // filterField, operator, formField
  27. // creates the form
  28. $this->form = new TQuickForm('form_search_Tblprog');
  29. $this->form->class = 'tform'; // change CSS class
  30. $this->form->style = 'display: table;width:100%'; // change style
  31. $this->form->setFormTitle('Tblprog');
  32. // create the form fields
  33. $id_prog = new TEntry('id_prog');
  34. $data_inicial = new TDate('data_inicial');
  35. $data_final = new TDate('data_final');
  36. // add the fields
  37. $this->form->addQuickField('Id Prog', $id_prog, 200 );
  38. $this->form->addQuickField('Data Inicial', $data_inicial, 200 );
  39. $this->form->addQuickField('Data Final', $data_final, 200 );
  40. // keep the form filled during navigation with session data
  41. $this->form->setData( TSession::getValue('Tblprog_filter_data') );
  42. // add the search form actions
  43. $this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
  44. $this->form->addQuickAction(_t('New'), new TAction(array('TblprogForm', 'onEdit')), 'bs:plus-sign green');
  45. // creates a DataGrid
  46. $this->datagrid = new TDataGrid;
  47. $this->datagrid->style = 'width: 100%';
  48. $this->datagrid->setHeight(320);
  49. // $this->datagrid->datatable = 'true';
  50. // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
  51. // creates the datagrid columns
  52. $column_id_prog = new TDataGridColumn('id_prog', 'Id Prog', 'right');
  53. $column_data_prog = new TDataGridColumn('data_prog', 'Data Prog', 'left');
  54. $column_hora_prog = new TDataGridColumn('hora_prog', 'Hora Prog', 'left');
  55. $column_origem = new TDataGridColumn('origem', 'Origem', 'left');
  56. // add the columns to the DataGrid
  57. $this->datagrid->addColumn($column_id_prog);
  58. $this->datagrid->addColumn($column_data_prog);
  59. $this->datagrid->addColumn($column_hora_prog);
  60. $this->datagrid->addColumn($column_origem);
  61. // create EDIT action
  62. $action_edit = new TDataGridAction(array('TblprogForm', 'onEdit'));
  63. $action_edit->setUseButton(TRUE);
  64. $action_edit->setButtonClass('btn btn-default');
  65. $action_edit->setLabel(_t('Edit'));
  66. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  67. $action_edit->setField('id_prog');
  68. $this->datagrid->addAction($action_edit);
  69. // create DELETE action
  70. $action_del = new TDataGridAction(array($this, 'onDelete'));
  71. $action_del->setUseButton(TRUE);
  72. $action_del->setButtonClass('btn btn-default');
  73. $action_del->setLabel(_t('Delete'));
  74. $action_del->setImage('fa:trash-o red fa-lg');
  75. $action_del->setField('id_prog');
  76. $this->datagrid->addAction($action_del);
  77. // create the datagrid model
  78. $this->datagrid->createModel();
  79. // create the page navigation
  80. $this->pageNavigation = new TPageNavigation;
  81. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  82. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  83. // vertical box container
  84. $container = new TVBox;
  85. $container->style = 'width: 90%';
  86. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  87. $container->add($this->form);
  88. $container->add($this->datagrid);
  89. $container->add($this->pageNavigation);
  90. parent::add($container);
  91. }
  92. }
  93. </your>
CS

Bom dia Ivan,

Obrigado, agora funcionou...rsss

Agora vou tentar o que eu vi em outro Post como criar um botão para limpar os filtros.

Sds,