Agenda com onReload() com query manual Salve, galera. Precisei criar uma query manual em virtude da complexidade de um retorno de dados. O objetivo é criar uma agenda para reserva de recursos. Esta query é chamada através do parâmetro data de agendamento para popular uma grid. Como preciso que apenas consigam um agendamento através da data atual somada a mais sete dias, criei dois botoes de ação para ir alterando a data de um e...
CS
Agenda com onReload() com query manual  
Fechado
Salve, galera. Precisei criar uma query manual em virtude da complexidade de um retorno de dados. O objetivo é criar uma agenda para reserva de recursos. Esta query é chamada através do parâmetro data de agendamento para popular uma grid.
Como preciso que apenas consigam um agendamento através da data atual somada a mais sete dias, criei dois botoes de ação para ir alterando a data de um em um dia até o máximo de sete. Mas preciso que ao clicar no botão onNextDay ou onBackDay, além de alterar o parâmetro da data, também passa este dado para a query do onReload e popule a datagrid com dados de acordo com a data passada. Só que não estou conseguindo. Segue o código:
 
  1. <?php
  2. class Agenda extends TPage
  3. {
  4. private $datagrid;
  5. private $formgrid;
  6. private $loaded;
  7. private $back_action;
  8. private $next_action;
  9. public function __construct()
  10. {
  11. parent::__construct();
  12. // creates the form
  13. $this->form = new TQuickForm('form_search_Agenda');
  14. $this->form->class = 'tform'; // change CSS class
  15. $this->form = new BootstrapFormWrapper($this->form);
  16. $this->form->style = 'display: table;width:100%'; // change style
  17. $this->form->setFormTitle('Agenda de Recursos');
  18. // create the form fields
  19. $data_agenda = new TDate('data_agenda');
  20. $data_agenda->setValue(date('d/m/Y'));
  21. $data_agenda->setEditable(FALSE);
  22. // add the fields
  23. $this->form->addQuickField('Data:', $data_agenda, 80 );
  24. $this->form->addQuickAction('Back Day', new TAction(array($this, 'onBackDay')), 'ico_previous.png');
  25. $this->form->addQuickAction('Next Day', new TAction(array($this, 'onNextDay')), 'ico_next.png');
  26. // add the search form actions
  27. //$this->form->addQuickAction(_t('Find'), new TAction(array($this, 'onSearch')), 'fa:search');
  28. $this->datagrid = new TDataGrid;
  29. $column_hora = new TDataGridColumn('hora', 'Horario', 'center', 50);
  30. $column_lab = new TDataGridColumn('lab', 'Laboratório', 'center', 150);
  31. $column_tab = new TDataGridColumn('tab', 'Tablets', 'center', 150);
  32. $column_intn = new TDataGridColumn('intn', 'Interativa', 'center', 150);
  33. $column_int1 = new TDataGridColumn('int1', 'Interativa 1 EM', 'center', 150);
  34. $column_int2 = new TDataGridColumn('int2', 'Interativa 2 EM', 'center', 150);
  35. $column_int3 = new TDataGridColumn('int3', 'Interativa 3 EM', 'center', 150);
  36. $this->datagrid->addColumn($column_hora);
  37. $this->datagrid->addColumn($column_lab);
  38. $this->datagrid->addColumn($column_tab);
  39. $this->datagrid->addColumn($column_intn);
  40. $this->datagrid->addColumn($column_int1);
  41. $this->datagrid->addColumn($column_int2);
  42. $this->datagrid->addColumn($column_int3);
  43. $this->datagrid->createModel();
  44. $this->datagrid->disableDefaultClick();
  45. // put datagrid inside a form
  46. $this->formgrid = new TForm;
  47. $this->formgrid->add($this->datagrid);
  48. $gridpack = new TVBox;
  49. $gridpack->style = 'width: 100%';
  50. $gridpack->add($this->formgrid);
  51. // vertical box container
  52. $container = new TVBox;
  53. $container->style = 'width: 90%';
  54. $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  55. $container->add(TPanelGroup::pack('Agenda de Recursos', $this->form));
  56. $container->add($gridpack);
  57. parent::add($container);
  58. }
  59. public function onReload( $param )
  60. {
  61. try
  62. {
  63. TTransaction::open('siga');
  64. TTransaction::setLogger( new TLoggerSTD );
  65. //TTransaction::setLogger(new TLoggerTXT('tmp/log.txt')); // file
  66. $conn = TTransaction::get(); // get PDO connection
  67. $data = $this->form->getData();
  68. $data1 = ($data->data_agenda);
  69. $data1 = date('Y/m/d', strtotime($data1));//
  70. $result = $conn->query("select * from agenda_prof ('".$data1."')");
  71. $this->datagrid->clear;
  72. $item = new StdClass;
  73. foreach ($result as $row)
  74. {
  75. $item->hora = $row[0];
  76. $item->lab = $row[1];
  77. $item->int1 = $row[2];
  78. $item->tab = $row[3];
  79. $item->int3 = $row[4];
  80. $item->intn = $row[5];
  81. $item->int2 = $row[6];
  82. $this->datagrid->addItem($item);
  83. }
  84. TTransaction::close();
  85. }
  86. catch ( Exception $e )
  87. {
  88. new TMessage( 'error', $e->getMessage());
  89. TTransaction::rollback();
  90. }
  91. }
  92. public function show()
  93. {
  94. if ( !$this->loaded)
  95. {
  96. $this->onReload( func_get_arg( 0 ));
  97. }
  98. parent::show();
  99. }
  100. /**
  101. * Next day
  102. */
  103. public function onNextDay($param)
  104. {
  105. $data = $this->form->getData();
  106. $data_atual = $data->data_agenda;
  107. $quebrarDatas = explode("/", $data_atual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
  108. list($dia, $mes, $ano) = $quebrarDatas;
  109. $nova_data = date('d/m/Y', mktime(0,0,0, $mes, $dia + 1, $ano));
  110. $data_controle = date('d/m/Y');
  111. $quebrarDatas = explode("/", $data_controle); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
  112. list($dia, $mes, $ano) = $quebrarDatas;
  113. $data_controle1 = date('d/m/Y', mktime(0,0,0, $mes, $dia + 7, $ano));
  114. if ($nova_data > $data_controle1)
  115. {
  116. $nova_data = date('d/m/Y');
  117. }
  118. $data->data_agenda = $nova_data;
  119. $data->data_controle = $data_controle1;
  120. $this->form->setData( $data );
  121. $this->onReload($param);
  122. }
  123. /**
  124. * Back day
  125. */
  126. public function onBackDay($param)
  127. {
  128. $data = $this->form->getData();
  129. $data_atual = $data->data_agenda;
  130. $quebrarDatas = explode("/", $data_atual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
  131. list($dia, $mes, $ano) = $quebrarDatas;
  132. $nova_data = date('d/m/Y', mktime(0,0,0, $mes, $dia - 1, $ano));
  133. $data->data_agenda = $nova_data;
  134. $this->form->setData( $data );
  135. $this->onReload($param);
  136. }
  137. }
  138. ?>


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


FC

De um var_dump na sua variável $param dentro do onReload veja qual data esta chegando apos clicar no botão onNextDay acho que essa variavel $param['data_agenda'] está trazendo seu resultado, senão estiver use variáveis de sessão.

Outra dica existe uma função nativa do PHP para trabalhar com datas pode ajudar no seu projeto.

Ex:
$suadata = strtotime('+1 day', $suadata);
$suadata = strtotime('-1 day', $suadata);
$suadata = strtotime('+7 day', $suadata);

Boa sorte
Felipe Cortez
CS

Então, amigo, o $data_agenda esta chegando em branco no onReload() quando chamo a classe pela primeira vez:
 
  1. <?php
  2. // create the form fields
  3. $data_agenda = new TDate('data_agenda');
  4. $data_agenda->setValue(date('Y/m/d'));
  5. $data_agenda->setEditable(FALSE);
  6. ?
  7. Já tentei variável de sessão, função estática, mas nada...
CS

Estou fazendo um teste assim, mas sempre chega null no onReload:
 
  1. <?php
  2. class PegaData extends TPage
  3. {
  4. public function __construct()
  5. {
  6. parent::__construct();
  7. // creates the form
  8. $this->form = new TQuickForm('form_PegaData');
  9. $this->form->class = 'tform'; // change CSS class
  10. $this->form = new BootstrapFormWrapper($this->form);
  11. $this->form->style = 'display: table;width:100%'; // change style
  12. $this->form->setFormTitle('Pega Data');
  13. // create the form fields
  14. $data_hoje = new TEntry('data_hoje');
  15. $data_hoje->setValue(date('Y/m/d'));
  16. $data_hoje->setEditable(FALSE);
  17. TSession::setValue('data_dia', $param['data_hoje']);
  18. // add the fields
  19. $this->form->addQuickField('Data:', $data_hoje, 80 );
  20. // vertical box container
  21. $container = new TVBox;
  22. $container->style = 'width: 90%';
  23. $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  24. $container->add(TPanelGroup::pack('Pega Data', $this->form));
  25. $container->add($gridpack);
  26. parent::add($container);
  27. }
  28. public function onReload( $param )
  29. {
  30. try
  31. {
  32. $data1 = TSession::getValue('data_dia');
  33. echo ' Chegou: ' . var_dump( $data1 ). '<br>';
  34. }
  35. catch ( Exception $e )
  36. {
  37. new TMessage( 'error', $e->getMessage());
  38. TTransaction::rollback();
  39. }
  40. }
  41. public function show()
  42. {
  43. if ( !$this->loaded)
  44. {
  45. $this->onReload( func_get_arg( 0 ));
  46. }
  47. parent::show();
  48. }
  49. }
  50. ?>

FC

Mais em qual momento vc está passando o valor para a variavel?

Tenta ai !!!

 
  1. <?php
  2. public function onBackDay($param)
  3. {
  4. $data = $this->form->getData();
  5. $data_atual = $data->data_agenda;
  6. $quebrarDatas = explode("/", $data_atual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
  7. list($dia, $mes, $ano) = $quebrarDatas;
  8. $nova_data = date('d/m/Y', mktime(0,0,0, $mes, $dia - 1, $ano));
  9. $data->data_agenda = $nova_data;
  10. TSession::setValue('data_dia',$nova_data);
  11. $this->form->setData( $data );
  12. $this->onReload($param);
  13. }
  14. ?>
PD

Carlos,

Você criou uma TPage com nome Agenda. Use sufixo tipo AgendaForm.
Nome simples é para model, não para TPage.

Att,